diff --git a/Makefile b/Makefile index f1146ef581f3c5bb47ce7038ec606e6d4366d5ff..07176d8d376a63e2416bde84588060bb6c8018aa 100644 --- a/Makefile +++ b/Makefile @@ -37,3 +37,400 @@ $(OBJS): # DO NOT DELETE +attributes.o: /usr/include/stdint.h /usr/include/features.h +attributes.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +attributes.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +attributes.o: /usr/include/bits/wchar.h /usr/include/stdio.h +attributes.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +attributes.o: /usr/include/libio.h /usr/include/_G_config.h +attributes.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +attributes.o: /usr/include/bits/sys_errlist.h attributes.h support.h +attributes.o: /usr/include/stdlib.h /usr/include/sys/types.h +attributes.o: /usr/include/time.h /usr/include/endian.h +attributes.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +attributes.o: /usr/include/sys/select.h /usr/include/bits/select.h +attributes.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +attributes.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +attributes.o: /usr/include/alloca.h +basicmbr.o: /usr/include/stdio.h /usr/include/features.h +basicmbr.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +basicmbr.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +basicmbr.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +basicmbr.o: /usr/include/libio.h /usr/include/_G_config.h +basicmbr.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +basicmbr.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h +basicmbr.o: /usr/include/sys/types.h /usr/include/time.h +basicmbr.o: /usr/include/endian.h /usr/include/bits/endian.h +basicmbr.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +basicmbr.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +basicmbr.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +basicmbr.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +basicmbr.o: /usr/include/stdint.h /usr/include/bits/wchar.h +basicmbr.o: /usr/include/fcntl.h /usr/include/bits/fcntl.h +basicmbr.o: /usr/include/string.h /usr/include/xlocale.h +basicmbr.o: /usr/include/sys/stat.h /usr/include/bits/stat.h +basicmbr.o: /usr/include/errno.h /usr/include/bits/errno.h +basicmbr.o: /usr/include/linux/errno.h /usr/include/asm/errno.h +basicmbr.o: /usr/include/asm-generic/errno.h +basicmbr.o: /usr/include/asm-generic/errno-base.h mbr.h gptpart.h support.h +basicmbr.o: parttypes.h guid.h /usr/include/uuid/uuid.h +basicmbr.o: /usr/include/sys/time.h attributes.h diskio.h +basicmbr.o: /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h +basicmbr.o: /usr/include/asm/ioctls.h /usr/include/asm-generic/ioctls.h +basicmbr.o: /usr/include/linux/ioctl.h /usr/include/asm/ioctl.h +basicmbr.o: /usr/include/asm-generic/ioctl.h /usr/include/bits/ioctl-types.h +basicmbr.o: /usr/include/sys/ttydefaults.h basicmbr.h mbrpart.h +bsd.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h +bsd.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h +bsd.o: /usr/include/gnu/stubs-64.h /usr/include/bits/types.h +bsd.o: /usr/include/bits/typesizes.h /usr/include/libio.h +bsd.o: /usr/include/_G_config.h /usr/include/wchar.h +bsd.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +bsd.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h +bsd.o: /usr/include/endian.h /usr/include/bits/endian.h +bsd.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +bsd.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +bsd.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +bsd.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +bsd.o: /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/fcntl.h +bsd.o: /usr/include/bits/fcntl.h /usr/include/sys/stat.h +bsd.o: /usr/include/bits/stat.h /usr/include/errno.h +bsd.o: /usr/include/bits/errno.h /usr/include/linux/errno.h +bsd.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h +bsd.o: /usr/include/asm-generic/errno-base.h support.h bsd.h gptpart.h +bsd.o: parttypes.h guid.h /usr/include/uuid/uuid.h /usr/include/sys/time.h +bsd.o: attributes.h diskio.h /usr/include/sys/ioctl.h +bsd.o: /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h +bsd.o: /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h +bsd.o: /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h +bsd.o: /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h +crc32.o: /usr/include/stdio.h /usr/include/features.h +crc32.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +crc32.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +crc32.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +crc32.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h +crc32.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +crc32.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h +crc32.o: /usr/include/endian.h /usr/include/bits/endian.h +crc32.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +crc32.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +crc32.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +crc32.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h crc32.h +crc32.o: /usr/include/stdint.h /usr/include/bits/wchar.h +diskio.o: /usr/include/sys/ioctl.h /usr/include/features.h +diskio.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +diskio.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +diskio.o: /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h +diskio.o: /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h +diskio.o: /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h +diskio.o: /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h +diskio.o: /usr/include/stdint.h /usr/include/bits/wchar.h +diskio.o: /usr/include/errno.h /usr/include/bits/errno.h +diskio.o: /usr/include/linux/errno.h /usr/include/asm/errno.h +diskio.o: /usr/include/asm-generic/errno.h +diskio.o: /usr/include/asm-generic/errno-base.h /usr/include/fcntl.h +diskio.o: /usr/include/bits/fcntl.h /usr/include/sys/types.h +diskio.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +diskio.o: /usr/include/time.h /usr/include/endian.h +diskio.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +diskio.o: /usr/include/sys/select.h /usr/include/bits/select.h +diskio.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +diskio.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +diskio.o: /usr/include/sys/stat.h /usr/include/bits/stat.h support.h +diskio.o: /usr/include/stdlib.h /usr/include/alloca.h diskio.h +diskio-unix.o: /usr/include/sys/ioctl.h /usr/include/features.h +diskio-unix.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +diskio-unix.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +diskio-unix.o: /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h +diskio-unix.o: /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h +diskio-unix.o: /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h +diskio-unix.o: /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h +diskio-unix.o: /usr/include/string.h /usr/include/xlocale.h +diskio-unix.o: /usr/include/stdint.h /usr/include/bits/wchar.h +diskio-unix.o: /usr/include/errno.h /usr/include/bits/errno.h +diskio-unix.o: /usr/include/linux/errno.h /usr/include/asm/errno.h +diskio-unix.o: /usr/include/asm-generic/errno.h +diskio-unix.o: /usr/include/asm-generic/errno-base.h /usr/include/fcntl.h +diskio-unix.o: /usr/include/bits/fcntl.h /usr/include/sys/types.h +diskio-unix.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +diskio-unix.o: /usr/include/time.h /usr/include/endian.h +diskio-unix.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +diskio-unix.o: /usr/include/sys/select.h /usr/include/bits/select.h +diskio-unix.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +diskio-unix.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +diskio-unix.o: /usr/include/sys/stat.h /usr/include/bits/stat.h diskio.h +diskio-unix.o: support.h /usr/include/stdlib.h /usr/include/alloca.h +diskio-windows.o: /usr/include/stdio.h /usr/include/features.h +diskio-windows.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +diskio-windows.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +diskio-windows.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +diskio-windows.o: /usr/include/libio.h /usr/include/_G_config.h +diskio-windows.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +diskio-windows.o: /usr/include/bits/sys_errlist.h /usr/include/stdint.h +diskio-windows.o: /usr/include/bits/wchar.h /usr/include/errno.h +diskio-windows.o: /usr/include/bits/errno.h /usr/include/linux/errno.h +diskio-windows.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h +diskio-windows.o: /usr/include/asm-generic/errno-base.h /usr/include/fcntl.h +diskio-windows.o: /usr/include/bits/fcntl.h /usr/include/sys/types.h +diskio-windows.o: /usr/include/time.h /usr/include/endian.h +diskio-windows.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +diskio-windows.o: /usr/include/sys/select.h /usr/include/bits/select.h +diskio-windows.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +diskio-windows.o: /usr/include/sys/sysmacros.h +diskio-windows.o: /usr/include/bits/pthreadtypes.h /usr/include/sys/stat.h +diskio-windows.o: /usr/include/bits/stat.h support.h /usr/include/stdlib.h +diskio-windows.o: /usr/include/alloca.h diskio.h /usr/include/sys/ioctl.h +diskio-windows.o: /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h +diskio-windows.o: /usr/include/asm-generic/ioctls.h +diskio-windows.o: /usr/include/linux/ioctl.h /usr/include/asm/ioctl.h +diskio-windows.o: /usr/include/asm-generic/ioctl.h +diskio-windows.o: /usr/include/bits/ioctl-types.h +diskio-windows.o: /usr/include/sys/ttydefaults.h +fixparts.o: /usr/include/stdio.h /usr/include/features.h +fixparts.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +fixparts.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +fixparts.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +fixparts.o: /usr/include/libio.h /usr/include/_G_config.h +fixparts.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +fixparts.o: /usr/include/bits/sys_errlist.h /usr/include/string.h +fixparts.o: /usr/include/xlocale.h basicmbr.h /usr/include/stdint.h +fixparts.o: /usr/include/bits/wchar.h /usr/include/sys/types.h +fixparts.o: /usr/include/time.h /usr/include/endian.h +fixparts.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +fixparts.o: /usr/include/sys/select.h /usr/include/bits/select.h +fixparts.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +fixparts.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +fixparts.o: diskio.h /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h +fixparts.o: /usr/include/asm/ioctls.h /usr/include/asm-generic/ioctls.h +fixparts.o: /usr/include/linux/ioctl.h /usr/include/asm/ioctl.h +fixparts.o: /usr/include/asm-generic/ioctl.h /usr/include/bits/ioctl-types.h +fixparts.o: /usr/include/sys/ttydefaults.h support.h /usr/include/stdlib.h +fixparts.o: /usr/include/alloca.h mbrpart.h +gdisk.o: /usr/include/stdio.h /usr/include/features.h +gdisk.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +gdisk.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +gdisk.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +gdisk.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h +gdisk.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +gdisk.o: /usr/include/string.h /usr/include/xlocale.h mbr.h +gdisk.o: /usr/include/stdint.h /usr/include/bits/wchar.h +gdisk.o: /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h +gdisk.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +gdisk.o: /usr/include/sys/select.h /usr/include/bits/select.h +gdisk.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +gdisk.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +gdisk.o: gptpart.h support.h /usr/include/stdlib.h /usr/include/alloca.h +gdisk.o: parttypes.h guid.h /usr/include/uuid/uuid.h /usr/include/sys/time.h +gdisk.o: attributes.h diskio.h /usr/include/sys/ioctl.h +gdisk.o: /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h +gdisk.o: /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h +gdisk.o: /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h +gdisk.o: /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h +gdisk.o: basicmbr.h mbrpart.h gpttext.h gpt.h bsd.h +gpt.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h +gpt.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h +gpt.o: /usr/include/gnu/stubs-64.h /usr/include/bits/types.h +gpt.o: /usr/include/bits/typesizes.h /usr/include/libio.h +gpt.o: /usr/include/_G_config.h /usr/include/wchar.h +gpt.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +gpt.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h +gpt.o: /usr/include/endian.h /usr/include/bits/endian.h +gpt.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +gpt.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +gpt.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +gpt.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +gpt.o: /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/fcntl.h +gpt.o: /usr/include/bits/fcntl.h /usr/include/string.h /usr/include/xlocale.h +gpt.o: /usr/include/math.h /usr/include/bits/huge_val.h +gpt.o: /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h +gpt.o: /usr/include/bits/inf.h /usr/include/bits/nan.h +gpt.o: /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h +gpt.o: /usr/include/sys/stat.h /usr/include/bits/stat.h /usr/include/errno.h +gpt.o: /usr/include/bits/errno.h /usr/include/linux/errno.h +gpt.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h +gpt.o: /usr/include/asm-generic/errno-base.h crc32.h gpt.h gptpart.h +gpt.o: support.h parttypes.h guid.h /usr/include/uuid/uuid.h +gpt.o: /usr/include/sys/time.h attributes.h mbr.h diskio.h +gpt.o: /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h +gpt.o: /usr/include/asm/ioctls.h /usr/include/asm-generic/ioctls.h +gpt.o: /usr/include/linux/ioctl.h /usr/include/asm/ioctl.h +gpt.o: /usr/include/asm-generic/ioctl.h /usr/include/bits/ioctl-types.h +gpt.o: /usr/include/sys/ttydefaults.h basicmbr.h mbrpart.h bsd.h +gptpart.o: /usr/include/string.h /usr/include/features.h +gptpart.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +gptpart.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +gptpart.o: /usr/include/xlocale.h /usr/include/stdio.h +gptpart.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +gptpart.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h +gptpart.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +gptpart.o: gptpart.h /usr/include/stdint.h /usr/include/bits/wchar.h +gptpart.o: /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h +gptpart.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +gptpart.o: /usr/include/sys/select.h /usr/include/bits/select.h +gptpart.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +gptpart.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +gptpart.o: support.h /usr/include/stdlib.h /usr/include/alloca.h parttypes.h +gptpart.o: guid.h /usr/include/uuid/uuid.h /usr/include/sys/time.h +gptpart.o: attributes.h +gpttext.o: /usr/include/string.h /usr/include/features.h +gpttext.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +gpttext.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +gpttext.o: /usr/include/xlocale.h /usr/include/errno.h +gpttext.o: /usr/include/bits/errno.h /usr/include/linux/errno.h +gpttext.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h +gpttext.o: /usr/include/asm-generic/errno-base.h /usr/include/stdint.h +gpttext.o: /usr/include/bits/wchar.h /usr/include/limits.h +gpttext.o: /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h +gpttext.o: /usr/include/linux/limits.h /usr/include/bits/posix2_lim.h +gpttext.o: attributes.h gpttext.h gpt.h /usr/include/sys/types.h +gpttext.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +gpttext.o: /usr/include/time.h /usr/include/endian.h +gpttext.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +gpttext.o: /usr/include/sys/select.h /usr/include/bits/select.h +gpttext.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +gpttext.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +gpttext.o: gptpart.h support.h /usr/include/stdlib.h /usr/include/alloca.h +gpttext.o: parttypes.h guid.h /usr/include/uuid/uuid.h +gpttext.o: /usr/include/sys/time.h mbr.h diskio.h /usr/include/sys/ioctl.h +gpttext.o: /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h +gpttext.o: /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h +gpttext.o: /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h +gpttext.o: /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h +gpttext.o: basicmbr.h mbrpart.h bsd.h +guid.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h +guid.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h +guid.o: /usr/include/gnu/stubs-64.h /usr/include/bits/types.h +guid.o: /usr/include/bits/typesizes.h /usr/include/libio.h +guid.o: /usr/include/_G_config.h /usr/include/wchar.h +guid.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +guid.o: /usr/include/time.h /usr/include/string.h /usr/include/xlocale.h +guid.o: guid.h /usr/include/stdint.h /usr/include/bits/wchar.h +guid.o: /usr/include/uuid/uuid.h /usr/include/sys/types.h +guid.o: /usr/include/endian.h /usr/include/bits/endian.h +guid.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +guid.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +guid.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +guid.o: /usr/include/bits/pthreadtypes.h /usr/include/sys/time.h support.h +guid.o: /usr/include/stdlib.h /usr/include/alloca.h +mbr.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h +mbr.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h +mbr.o: /usr/include/gnu/stubs-64.h /usr/include/bits/types.h +mbr.o: /usr/include/bits/typesizes.h /usr/include/libio.h +mbr.o: /usr/include/_G_config.h /usr/include/wchar.h +mbr.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +mbr.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h +mbr.o: /usr/include/endian.h /usr/include/bits/endian.h +mbr.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +mbr.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +mbr.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +mbr.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +mbr.o: /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/fcntl.h +mbr.o: /usr/include/bits/fcntl.h /usr/include/string.h /usr/include/xlocale.h +mbr.o: /usr/include/sys/stat.h /usr/include/bits/stat.h /usr/include/errno.h +mbr.o: /usr/include/bits/errno.h /usr/include/linux/errno.h +mbr.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h +mbr.o: /usr/include/asm-generic/errno-base.h mbr.h gptpart.h support.h +mbr.o: parttypes.h guid.h /usr/include/uuid/uuid.h /usr/include/sys/time.h +mbr.o: attributes.h diskio.h /usr/include/sys/ioctl.h +mbr.o: /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h +mbr.o: /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h +mbr.o: /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h +mbr.o: /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h +mbr.o: basicmbr.h mbrpart.h +mbrpart.o: /usr/include/stdint.h /usr/include/features.h +mbrpart.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +mbrpart.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +mbrpart.o: /usr/include/bits/wchar.h support.h /usr/include/stdlib.h +mbrpart.o: /usr/include/sys/types.h /usr/include/bits/types.h +mbrpart.o: /usr/include/bits/typesizes.h /usr/include/time.h +mbrpart.o: /usr/include/endian.h /usr/include/bits/endian.h +mbrpart.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +mbrpart.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +mbrpart.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +mbrpart.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h mbrpart.h +parttypes.o: /usr/include/string.h /usr/include/features.h +parttypes.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +parttypes.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +parttypes.o: /usr/include/xlocale.h /usr/include/stdint.h +parttypes.o: /usr/include/bits/wchar.h /usr/include/stdio.h +parttypes.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +parttypes.o: /usr/include/libio.h /usr/include/_G_config.h +parttypes.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h +parttypes.o: /usr/include/bits/sys_errlist.h parttypes.h +parttypes.o: /usr/include/stdlib.h /usr/include/sys/types.h +parttypes.o: /usr/include/time.h /usr/include/endian.h +parttypes.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +parttypes.o: /usr/include/sys/select.h /usr/include/bits/select.h +parttypes.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +parttypes.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +parttypes.o: /usr/include/alloca.h support.h guid.h /usr/include/uuid/uuid.h +parttypes.o: /usr/include/sys/time.h +sgdisk.o: /usr/include/stdio.h /usr/include/features.h +sgdisk.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +sgdisk.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +sgdisk.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +sgdisk.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h +sgdisk.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +sgdisk.o: /usr/include/popt.h /usr/include/errno.h /usr/include/bits/errno.h +sgdisk.o: /usr/include/linux/errno.h /usr/include/asm/errno.h +sgdisk.o: /usr/include/asm-generic/errno.h +sgdisk.o: /usr/include/asm-generic/errno-base.h /usr/include/stdint.h +sgdisk.o: /usr/include/bits/wchar.h mbr.h /usr/include/sys/types.h +sgdisk.o: /usr/include/time.h /usr/include/endian.h +sgdisk.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +sgdisk.o: /usr/include/sys/select.h /usr/include/bits/select.h +sgdisk.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +sgdisk.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +sgdisk.o: gptpart.h support.h /usr/include/stdlib.h /usr/include/alloca.h +sgdisk.o: parttypes.h guid.h /usr/include/uuid/uuid.h /usr/include/sys/time.h +sgdisk.o: attributes.h diskio.h /usr/include/sys/ioctl.h +sgdisk.o: /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h +sgdisk.o: /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h +sgdisk.o: /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h +sgdisk.o: /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h +sgdisk.o: basicmbr.h mbrpart.h gpt.h bsd.h +support.o: /usr/include/stdio.h /usr/include/features.h +support.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +support.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +support.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h +support.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h +support.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +support.o: /usr/include/stdint.h /usr/include/bits/wchar.h +support.o: /usr/include/errno.h /usr/include/bits/errno.h +support.o: /usr/include/linux/errno.h /usr/include/asm/errno.h +support.o: /usr/include/asm-generic/errno.h +support.o: /usr/include/asm-generic/errno-base.h /usr/include/fcntl.h +support.o: /usr/include/bits/fcntl.h /usr/include/sys/types.h +support.o: /usr/include/time.h /usr/include/endian.h +support.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +support.o: /usr/include/sys/select.h /usr/include/bits/select.h +support.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +support.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h +support.o: /usr/include/string.h /usr/include/xlocale.h +support.o: /usr/include/sys/stat.h /usr/include/bits/stat.h support.h +support.o: /usr/include/stdlib.h /usr/include/alloca.h +test.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h +test.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h +test.o: /usr/include/gnu/stubs-64.h /usr/include/bits/types.h +test.o: /usr/include/bits/typesizes.h /usr/include/libio.h +test.o: /usr/include/_G_config.h /usr/include/wchar.h +test.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h +test.o: support.h /usr/include/stdint.h /usr/include/bits/wchar.h +test.o: /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h +test.o: /usr/include/endian.h /usr/include/bits/endian.h +test.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +test.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +test.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +test.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h +testguid.o: guid.h /usr/include/stdint.h /usr/include/features.h +testguid.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h +testguid.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h +testguid.o: /usr/include/bits/wchar.h /usr/include/uuid/uuid.h +testguid.o: /usr/include/sys/types.h /usr/include/bits/types.h +testguid.o: /usr/include/bits/typesizes.h /usr/include/time.h +testguid.o: /usr/include/endian.h /usr/include/bits/endian.h +testguid.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +testguid.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +testguid.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +testguid.o: /usr/include/bits/pthreadtypes.h /usr/include/sys/time.h +testguid.o: parttypes.h /usr/include/stdlib.h /usr/include/alloca.h support.h diff --git a/basicmbr.cc b/basicmbr.cc index 764daafcdaccf7a4ba24c331f0a56954e615ac59..0af3a82e0d9c54e4397d66e04da0da82333a37be 100644 --- a/basicmbr.cc +++ b/basicmbr.cc @@ -1604,7 +1604,7 @@ int BasicMBRData::DoMenu(const string& prompt) { do { cout << prompt; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); switch (*line) { case '\n': break; @@ -1655,7 +1655,7 @@ int BasicMBRData::DoMenu(const string& prompt) { hexCode = 0; while ((hexCode <= 0) || (hexCode > 255)) { cout << "Enter an MBR hex code: "; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); sscanf(line, "%x", &hexCode); if (line[0] == '\n') hexCode = 0x00; diff --git a/bsd.cc b/bsd.cc index c3ecadf733dc8866c15f4b1c23a03a37674de314..57fb912d1cc9658f74cdc67d96849d04d525497b 100644 --- a/bsd.cc +++ b/bsd.cc @@ -37,8 +37,7 @@ BSDData::BSDData(void) { } // default constructor BSDData::~BSDData(void) { - if (partitions != NULL) - delete[] partitions; + delete[] partitions; } // destructor // Read BSD disklabel data from the specified device filename. This function diff --git a/diskio-unix.cc b/diskio-unix.cc index 238e529e2db189c0eefdcb45cc7ae68d5652c116..5494dd5b9dd9a8b30b6e5f58a54c41ee60a77644 100644 --- a/diskio-unix.cc +++ b/diskio-unix.cc @@ -409,7 +409,7 @@ uint64_t DiskIO::DiskSize(int *err) { // fstat() gives us.... if ((sectors == 0) || (*err == -1)) { if (fstat64(fd, &st) == 0) { - bytes = (off_t) st.st_size; + bytes = st.st_size; if ((bytes % UINT64_C(512)) != 0) cerr << "Warning: File size is not a multiple of 512 bytes!" << " Misbehavior is likely!\n\a"; diff --git a/gdisk.cc b/gdisk.cc index 78d65b797593ac6d0c913080739f85f971c10c83..f824777b55d9b357b1f6d6af98e29471a6afb2f2 100644 --- a/gdisk.cc +++ b/gdisk.cc @@ -84,13 +84,13 @@ void MainMenu(string filename, GPTDataTextUI* theGPT) { do { cout << "\nCommand (? for help): "; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); switch (*line) { case '\n': break; case 'b': case 'B': cout << "Enter backup filename to save: "; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); sscanf(line, "%s", buFile); theGPT->SaveGPTBackup(buFile); break; @@ -183,7 +183,7 @@ void RecoveryMenu(string filename, GPTDataTextUI* theGPT) { do { cout << "\nRecovery/transformation command (? for help): "; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); switch (*line) { case '\n': break; @@ -239,7 +239,7 @@ void RecoveryMenu(string filename, GPTDataTextUI* theGPT) { break; case 'l': case 'L': cout << "Enter backup filename to load: "; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); sscanf(line, "%s", buFile); theGPT->LoadGPTBackup(buFile); break; @@ -313,7 +313,7 @@ void ExpertsMenu(string filename, GPTDataTextUI* theGPT) { do { cout << "\nExpert command (? for help): "; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); switch (*line) { case '\n': break; @@ -327,7 +327,7 @@ void ExpertsMenu(string filename, GPTDataTextUI* theGPT) { if (theGPT->GetPartRange(&temp1, &temp2) > 0) { pn = theGPT->GetPartNum(); cout << "Enter the partition's new unique GUID ('R' to randomize): "; - ReadCString(guidStr, 255); + ReadCString(guidStr, sizeof(guidStr)); if ((strlen(guidStr) >= 33) || (guidStr[0] == 'R') || (guidStr[0] == 'r')) { theGPT->SetPartitionGUID(pn, (GUIDData) guidStr); cout << "New GUID is " << theGPT->operator[](pn).GetUniqueGUID() << "\n"; @@ -349,7 +349,7 @@ void ExpertsMenu(string filename, GPTDataTextUI* theGPT) { break; case 'g': case 'G': cout << "Enter the disk's unique GUID ('R' to randomize): "; - ReadCString(guidStr, 255); + ReadCString(guidStr, sizeof(guidStr)); if ((strlen(guidStr) >= 33) || (guidStr[0] == 'R') || (guidStr[0] == 'r')) { theGPT->SetDiskGUID((GUIDData) guidStr); cout << "The new disk GUID is " << theGPT->GetDiskGUID() << "\n"; @@ -402,7 +402,7 @@ void ExpertsMenu(string filename, GPTDataTextUI* theGPT) { i = strlen(device); if (i && device[i - 1] == '\n') device[i - 1] = '\0'; - if (*device && strlen(device) > 0) { + if (*device) { secondDevice = *theGPT; secondDevice.SetDisk(device); secondDevice.SaveGPTData(0); diff --git a/gpt.cc b/gpt.cc index 652fab4ca5aacd972454b8e1d396cf86c9bd96d7..4f5683ad648688c10bfa7792f9bc0fd6b6a66173 100644 --- a/gpt.cc +++ b/gpt.cc @@ -19,6 +19,7 @@ #include <sys/stat.h> #include <errno.h> #include <iostream> +#include <algorithm> #include "crc32.h" #include "gpt.h" #include "bsd.h" @@ -1683,59 +1684,12 @@ uint32_t GPTData::CreatePartition(uint32_t partNum, uint64_t startSector, uint64 } // GPTData::CreatePartition(partNum, startSector, endSector) // Sort the GPT entries, eliminating gaps and making for a logical -// ordering. Relies on QuickSortGPT() for the bulk of the work +// ordering. void GPTData::SortGPT(void) { - uint32_t i, numFound, firstPart, lastPart; - - // First, find the last partition with data, so as not to - // spend needless time sorting empty entries.... - numFound = GetPartRange(&firstPart, &lastPart); - - // Now swap empties with the last partitions, to simplify the logic - // in the Quicksort function.... - i = 0; - while (i < lastPart) { - if (partitions[i].GetFirstLBA() == 0) { - SwapPartitions(i, lastPart); - do { - lastPart--; - } while ((lastPart > 0) && (partitions[lastPart].GetFirstLBA() == 0)); - } // if - i++; - } // while - - // If there are more empties than partitions in the range from 0 to lastPart, - // the above leaves lastPart set too high, so we've got to adjust it to - // prevent empties from migrating to the top of the list.... - GetPartRange(&firstPart, &lastPart); - - // Now call the recursive quick sort routine to do the real work.... - QuickSortGPT(0, lastPart); + if (numParts > 0) + sort(partitions, partitions + numParts - 1); } // GPTData::SortGPT() -// Recursive quick sort algorithm for GPT partitions. Note that if there -// are any empties in the specified range, they'll be sorted to the -// start, resulting in a sorted set of partitions that begins with -// partition 2, 3, or higher. -void GPTData::QuickSortGPT(int start, int finish) { - uint64_t starterValue; // starting location of median partition - int left, right; - - left = start; - right = finish; - starterValue = partitions[(start + finish) / 2].GetFirstLBA(); - do { - while (partitions[left].GetFirstLBA() < starterValue) - left++; - while (partitions[right].GetFirstLBA() > starterValue) - right--; - if (left <= right) - SwapPartitions(left++, right--); - } while (left <= right); - if (start < right) QuickSortGPT(start, right); - if (finish > left) QuickSortGPT(left, finish); -} // GPTData::QuickSortGPT() - // Swap the contents of two partitions. // Returns 1 if successful, 0 if either partition is out of range // (that is, not a legal number; either or both can be empty). @@ -1765,8 +1719,7 @@ int GPTData::ClearGPTData(void) { int goOn = 1, i; // Set up the partition table.... - if (partitions != NULL) - delete[] partitions; + delete[] partitions; partitions = NULL; SetGPTSize(NUM_GPT_ENTRIES); @@ -1963,16 +1916,14 @@ int GPTData::GetPartRange(uint32_t *low, uint32_t *high) { *low = numParts + 1; // code for "not found" *high = 0; - if (numParts > 0) { // only try if partition table exists... - for (i = 0; i < numParts; i++) { - if (partitions[i].GetFirstLBA() != UINT64_C(0)) { // it exists - *high = i; // since we're counting up, set the high value - // Set the low value only if it's not yet found... - if (*low == (numParts + 1)) *low = i; - numFound++; - } // if - } // for - } // if + for (i = 0; i < numParts; i++) { + if (partitions[i].GetFirstLBA() != UINT64_C(0)) { // it exists + *high = i; // since we're counting up, set the high value + // Set the low value only if it's not yet found... + if (*low == (numParts + 1)) *low = i; + numFound++; + } // if + } // for // Above will leave *low pointing to its "not found" value if no partitions // are defined, so reset to 0 if this is the case.... @@ -1987,7 +1938,7 @@ int GPTData::FindFirstFreePart(void) { int i = 0; if (partitions != NULL) { - while ((partitions[i].IsUsed()) && (i < (int) numParts)) + while ((i < (int) numParts) && (partitions[i].IsUsed())) i++; if (i >= (int) numParts) i = -1; @@ -2281,6 +2232,10 @@ const GPTPart & GPTData::operator[](uint32_t partNum) const { if (partNum >= numParts) { cerr << "Partition number out of range: " << partNum << "\n"; partNum = 0; + if ((numParts == 0) || (partitions == NULL)) { + cerr << "No partitions defined; fatal error!\n"; + exit(1); + } // if } // if return partitions[partNum]; } // operator[] diff --git a/gpt.h b/gpt.h index 69c06d3d56ceb55fda493d8ca5e66ce47503ff57..e452663be7cb2f83bd36f7a047d704be63cc8d49 100644 --- a/gpt.h +++ b/gpt.h @@ -95,6 +95,7 @@ public: GPTData(string deviceFilename); virtual ~GPTData(void); GPTData & operator=(const GPTData & orig); +// bool operator<(const GPTData &other) const; // Verify (or update) data integrity int Verify(void); diff --git a/gptpart.cc b/gptpart.cc index 54aa6185cfe0319fc4d26ae5438539b8f1423093..062206a6ab026d01cbd821a486d752e6b5eaf70a 100644 --- a/gptpart.cc +++ b/gptpart.cc @@ -131,6 +131,19 @@ GPTPart & GPTPart::operator=(const GPTPart & orig) { return *this; } // assignment operator +// Compare the values, and return a bool result. +// Because this is intended for sorting and a firstLBA value of 0 denotes +// a partition that's not in use and so that should be sorted upwards, +// we return the opposite of the usual arithmetic result when either +// firstLBA value is 0. +bool GPTPart::operator<(const GPTPart &other) const { + + if (firstLBA && other.firstLBA) + return (firstLBA < other.firstLBA); + else + return (other.firstLBA < firstLBA); +} // GPTPart::operator<() + // Display summary information; does nothing if the partition is empty. void GPTPart::ShowSummary(int partNum, uint32_t blockSize) { string sizeInSI; @@ -227,7 +240,7 @@ void GPTPart::ChangeType(void) { cout << "Current type is '" << GetTypeName() << "'\n"; do { cout << "Hex code or GUID (L to show codes, Enter = 0700): "; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); if ((line[0] == 'L') || (line[0] == 'l')) { partitionType.ShowAllTypes(); } else { diff --git a/gptpart.h b/gptpart.h index 104a818c31cc2212348a8e49af724e068fb50ddf..09c3136059d2cf6814db108d4a75315830c9e385 100644 --- a/gptpart.h +++ b/gptpart.h @@ -78,6 +78,7 @@ class GPTPart { // Additional functions GPTPart & operator=(const GPTPart & orig); + bool operator<(const GPTPart &other) const; void ShowSummary(int partNum, uint32_t blockSize); // display summary information (1-line) void ShowDetails(uint32_t blockSize); // display detailed information (multi-line) void BlankPartition(void); // empty partition of data diff --git a/gpttext.cc b/gpttext.cc index e6ca8ce7ea7f5505093b4c647cd874b0f6a04b62..aa209cba4e2701a315199bf671d296cd77186579 100644 --- a/gpttext.cc +++ b/gpttext.cc @@ -371,7 +371,7 @@ void GPTDataTextUI::MakeHybrid(void) { // hybrid MBR.... cout << "Type from one to three GPT partition numbers, separated by spaces, to be\n" << "added to the hybrid MBR, in sequence: "; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); numPartsToCvt = sscanf(line, "%d %d %d", &partNums[0], &partNums[1], &partNums[2]); if (numPartsToCvt > 0) { @@ -426,7 +426,7 @@ void GPTDataTextUI::MakeHybrid(void) { cout << "Enter an MBR hex code (EE is EFI GPT, but may confuse MacOS): "; // Comment on above: Mac OS treats disks with more than one // 0xEE MBR partition as MBR disks, not as GPT disks. - ReadCString(line, 255); + ReadCString(line, sizeof(line)); sscanf(line, "%x", &hexCode); if (line[0] == '\n') hexCode = 0x00; @@ -480,7 +480,7 @@ int GetMBRTypeCode(int defType) { cout << "Enter an MBR hex code (default " << hex; cout.width(2); cout << defType << "): " << dec; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); if (line[0] == '\n') typeCode = defType; else diff --git a/sgdisk.cc b/sgdisk.cc index 11df6ed1910173628e35695629914d5c4770cf04..1f3e79248b1609f7751dee8c14d4572fcd343d33 100644 --- a/sgdisk.cc +++ b/sgdisk.cc @@ -13,6 +13,7 @@ #include <popt.h> #include <errno.h> #include <stdint.h> +#include <string.h> #include <string> #include <iostream> #include <sstream> @@ -438,6 +439,7 @@ int BuildMBR(GPTData & theGPT, char* argument, int isHybrid) { if ((&theGPT != NULL) && (argument != NULL)) { numParts = CountColons(argument) + 1; + cout << "numParts = " << numParts << "\n"; if (numParts <= (4 - isHybrid)) { newMBR.SetDisk(theGPT.GetDisk()); for (i = 0; i < numParts; i++) { @@ -464,15 +466,14 @@ int BuildMBR(GPTData & theGPT, char* argument, int isHybrid) { return allOK; } // BuildMBR() -// Returns the number of colons in argument string +// Returns the number of colons in argument string, ignoring the +// first character (thus, a leading colon is ignored, as GetString() +// does). int CountColons(char* argument) { - int num = 0, i = 0; + int num = 0; + + while ((argument[0] != '\0') && (argument = strchr(&argument[1], ':'))) + num++; - if (argument != NULL) { - while (argument[i] != '\0') { - if (argument[i++] == ':') - num++; - } // while - } // if return num; } // CountColons() diff --git a/support.cc b/support.cc index f88f02108bf91a9a230e52b345b7f398664c2ecf..200cbca0af9e36970141947cf0ccf571cf59048f 100644 --- a/support.cc +++ b/support.cc @@ -31,12 +31,11 @@ using namespace std; -char* ReadCString(char *inStr, int numchars) { - if (!fgets(inStr, 255, stdin)) { +void ReadCString(char *inStr, int numchars) { + if (!fgets(inStr, numchars, stdin)) { cerr << "Critical error! Failed fgets() in ReadCString()\n"; exit(1); } // if - return inStr; } // ReadCString() // Get a numeric value from the user, between low and high (inclusive). @@ -74,7 +73,7 @@ char GetYN(void) { do { cout << "(Y/N): "; - ReadCString(line, 255); + ReadCString(line, sizeof(line)); sscanf(line, "%c", &response); if (response == 'y') response = 'Y'; @@ -321,16 +320,28 @@ uint64_t GetInt(const string & argument, int itemNum) { } // GetInt() // Extract string data from argument string, which should be colon-delimited +// If string begins with a colon, that colon is skipped in the counting. If an +// invalid itemNum is specified, returns an empty string. string GetString(string argument, int itemNum) { - size_t startPos = -1, endPos = -1; - - while (itemNum-- > 0) { - startPos = endPos + 1; + size_t startPos = 0, endPos = 0; + string retVal = ""; + int foundLast = 0; + int numFound = 0; + + if (argument[0] == ':') + argument.erase(0, 1); + while ((numFound < itemNum) && (!foundLast)) { endPos = argument.find(':', startPos); - } - if (endPos == string::npos) - endPos = argument.length(); - endPos--; - - return argument.substr(startPos, endPos - startPos + 1); + numFound++; + if (endPos == string::npos) { + foundLast = 1; + endPos = argument.length(); + } else if (numFound < itemNum) { + startPos = endPos + 1; + } // if/elseif + } // while + if ((numFound == itemNum) && (numFound > 0)) + retVal = argument.substr(startPos, endPos - startPos); + + return retVal; } // GetString() \ No newline at end of file diff --git a/support.h b/support.h index 2c67cfb1fab0439fd10df3626a58917bce4ae0f3..73363b7827b6fe0661b3a63bac9c8b3152c980d7 100644 --- a/support.h +++ b/support.h @@ -56,7 +56,7 @@ using namespace std; -char* ReadCString(char *inStr, int numchars); +void ReadCString(char *inStr, int numchars); int GetNumber(int low, int high, int def, const string & prompt); char GetYN(void); uint64_t GetSectorNum(uint64_t low, uint64_t high, uint64_t def, uint64_t sSize, const std::string& prompt);