1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Default stripesize 64k & config file setting for it;

Clear many compiler warnings (i386) & associated bugs - hopefully without
introducing too many new bugs:-)  (Same exercise required for other archs.)
Default compilation has optimisation - or else use ./configure --enable-debug
This commit is contained in:
Alasdair Kergon 2002-12-19 23:25:55 +00:00
parent 4c64ed4ced
commit 8ef2b021ed
98 changed files with 1031 additions and 871 deletions

View File

@ -1 +1 @@
1.95.12-cvs (2002-12-12) 1.95.13-cvs (2002-12-19)

186
configure vendored
View File

@ -26,6 +26,8 @@ ac_help="$ac_help
statically. Default is dynamic linking" statically. Default is dynamic linking"
ac_help="$ac_help ac_help="$ac_help
--enable-readline Enable readline support" --enable-readline Enable readline support"
ac_help="$ac_help
--enable-debug Enable debugging"
# Initialize some variables set by options. # Initialize some variables set by options.
# The variables have the same names as the options, with # The variables have the same names as the options, with
@ -562,7 +564,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args. # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2 set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:566: checking for $ac_word" >&5 echo "configure:568: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -594,7 +596,7 @@ done
# Extract the first word of "gcc", so it can be a program name with args. # Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2 set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:598: checking for $ac_word" >&5 echo "configure:600: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -624,7 +626,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args. # Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2 set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:628: checking for $ac_word" >&5 echo "configure:630: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -675,7 +677,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args. # Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2 set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:679: checking for $ac_word" >&5 echo "configure:681: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -707,7 +709,7 @@ fi
fi fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:711: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 echo "configure:713: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@ -718,12 +720,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF cat > conftest.$ac_ext << EOF
#line 722 "configure" #line 724 "configure"
#include "confdefs.h" #include "confdefs.h"
main(){return(0);} main(){return(0);}
EOF EOF
if { (eval echo configure:727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler. # If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then if (./conftest; exit) 2>/dev/null; then
@ -749,12 +751,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:753: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "configure:755: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:758: checking whether we are using GNU C" >&5 echo "configure:760: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -763,7 +765,7 @@ else
yes; yes;
#endif #endif
EOF EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:767: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:769: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes ac_cv_prog_gcc=yes
else else
ac_cv_prog_gcc=no ac_cv_prog_gcc=no
@ -782,7 +784,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS" ac_save_CFLAGS="$CFLAGS"
CFLAGS= CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:786: checking whether ${CC-cc} accepts -g" >&5 echo "configure:788: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -825,7 +827,7 @@ fi
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh. # ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:829: checking for a BSD compatible install" >&5 echo "configure:831: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -878,7 +880,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
echo "configure:882: checking whether ln -s works" >&5 echo "configure:884: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -899,7 +901,7 @@ else
fi fi
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
echo "configure:903: checking whether ${MAKE-make} sets \${MAKE}" >&5 echo "configure:905: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -928,7 +930,7 @@ fi
# Extract the first word of "ranlib", so it can be a program name with args. # Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2 set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:932: checking for $ac_word" >&5 echo "configure:934: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -961,12 +963,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
do do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
echo "configure:965: checking for $ac_hdr that defines DIR" >&5 echo "configure:967: checking for $ac_hdr that defines DIR" >&5
if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 970 "configure" #line 972 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sys/types.h> #include <sys/types.h>
#include <$ac_hdr> #include <$ac_hdr>
@ -974,7 +976,7 @@ int main() {
DIR *dirp = 0; DIR *dirp = 0;
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:980: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_header_dirent_$ac_safe=yes" eval "ac_cv_header_dirent_$ac_safe=yes"
else else
@ -999,7 +1001,7 @@ done
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
if test $ac_header_dirent = dirent.h; then if test $ac_header_dirent = dirent.h; then
echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
echo "configure:1003: checking for opendir in -ldir" >&5 echo "configure:1005: checking for opendir in -ldir" >&5
ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -1007,7 +1009,7 @@ else
ac_save_LIBS="$LIBS" ac_save_LIBS="$LIBS"
LIBS="-ldir $LIBS" LIBS="-ldir $LIBS"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1011 "configure" #line 1013 "configure"
#include "confdefs.h" #include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */ /* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2 /* We use char because int might match the return type of a gcc2
@ -1018,7 +1020,7 @@ int main() {
opendir() opendir()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes" eval "ac_cv_lib_$ac_lib_var=yes"
else else
@ -1040,7 +1042,7 @@ fi
else else
echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
echo "configure:1044: checking for opendir in -lx" >&5 echo "configure:1046: checking for opendir in -lx" >&5
ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -1048,7 +1050,7 @@ else
ac_save_LIBS="$LIBS" ac_save_LIBS="$LIBS"
LIBS="-lx $LIBS" LIBS="-lx $LIBS"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1052 "configure" #line 1054 "configure"
#include "confdefs.h" #include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */ /* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2 /* We use char because int might match the return type of a gcc2
@ -1059,7 +1061,7 @@ int main() {
opendir() opendir()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1063: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes" eval "ac_cv_lib_$ac_lib_var=yes"
else else
@ -1082,7 +1084,7 @@ fi
fi fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
echo "configure:1086: checking how to run the C preprocessor" >&5 echo "configure:1088: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory. # On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then if test -n "$CPP" && test -d "$CPP"; then
CPP= CPP=
@ -1097,13 +1099,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser, # On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. # not just through cpp.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1101 "configure" #line 1103 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <assert.h> #include <assert.h>
Syntax Error Syntax Error
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1107: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1109: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
: :
@ -1114,13 +1116,13 @@ else
rm -rf conftest* rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp" CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1118 "configure" #line 1120 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <assert.h> #include <assert.h>
Syntax Error Syntax Error
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1124: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1126: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
: :
@ -1131,13 +1133,13 @@ else
rm -rf conftest* rm -rf conftest*
CPP="${CC-cc} -nologo -E" CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1135 "configure" #line 1137 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <assert.h> #include <assert.h>
Syntax Error Syntax Error
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1143: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
: :
@ -1162,12 +1164,12 @@ fi
echo "$ac_t""$CPP" 1>&6 echo "$ac_t""$CPP" 1>&6
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
echo "configure:1166: checking for ANSI C header files" >&5 echo "configure:1168: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1171 "configure" #line 1173 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
@ -1175,7 +1177,7 @@ else
#include <float.h> #include <float.h>
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1181: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
rm -rf conftest* rm -rf conftest*
@ -1192,7 +1194,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI. # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1196 "configure" #line 1198 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <string.h> #include <string.h>
EOF EOF
@ -1210,7 +1212,7 @@ fi
if test $ac_cv_header_stdc = yes; then if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1214 "configure" #line 1216 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdlib.h> #include <stdlib.h>
EOF EOF
@ -1231,7 +1233,7 @@ if test "$cross_compiling" = yes; then
: :
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1235 "configure" #line 1237 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <ctype.h> #include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@ -1242,7 +1244,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); } exit (0); }
EOF EOF
if { (eval echo configure:1246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null if { (eval echo configure:1248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then then
: :
else else
@ -1269,17 +1271,17 @@ for ac_hdr in fcntl.h malloc.h sys/ioctl.h unistd.h
do do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:1273: checking for $ac_hdr" >&5 echo "configure:1275: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1278 "configure" #line 1280 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <$ac_hdr> #include <$ac_hdr>
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1283: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } { (eval echo configure:1285: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then if test -z "$ac_err"; then
rm -rf conftest* rm -rf conftest*
@ -1307,12 +1309,12 @@ done
echo $ac_n "checking for working const""... $ac_c" 1>&6 echo $ac_n "checking for working const""... $ac_c" 1>&6
echo "configure:1311: checking for working const" >&5 echo "configure:1313: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1316 "configure" #line 1318 "configure"
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
@ -1361,7 +1363,7 @@ ccp = (char const *const *) p;
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1365: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:1367: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
ac_cv_c_const=yes ac_cv_c_const=yes
else else
@ -1382,21 +1384,21 @@ EOF
fi fi
echo $ac_n "checking for inline""... $ac_c" 1>&6 echo $ac_n "checking for inline""... $ac_c" 1>&6
echo "configure:1386: checking for inline" >&5 echo "configure:1388: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
ac_cv_c_inline=no ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1393 "configure" #line 1395 "configure"
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
} int $ac_kw foo() { } int $ac_kw foo() {
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1400: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:1402: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
ac_cv_c_inline=$ac_kw; break ac_cv_c_inline=$ac_kw; break
else else
@ -1422,12 +1424,12 @@ EOF
esac esac
echo $ac_n "checking for off_t""... $ac_c" 1>&6 echo $ac_n "checking for off_t""... $ac_c" 1>&6
echo "configure:1426: checking for off_t" >&5 echo "configure:1428: checking for off_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1431 "configure" #line 1433 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sys/types.h> #include <sys/types.h>
#if STDC_HEADERS #if STDC_HEADERS
@ -1455,12 +1457,12 @@ EOF
fi fi
echo $ac_n "checking for pid_t""... $ac_c" 1>&6 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
echo "configure:1459: checking for pid_t" >&5 echo "configure:1461: checking for pid_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1464 "configure" #line 1466 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sys/types.h> #include <sys/types.h>
#if STDC_HEADERS #if STDC_HEADERS
@ -1488,12 +1490,12 @@ EOF
fi fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6 echo $ac_n "checking for size_t""... $ac_c" 1>&6
echo "configure:1492: checking for size_t" >&5 echo "configure:1494: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1497 "configure" #line 1499 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sys/types.h> #include <sys/types.h>
#if STDC_HEADERS #if STDC_HEADERS
@ -1521,12 +1523,12 @@ EOF
fi fi
echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6
echo "configure:1525: checking for st_rdev in struct stat" >&5 echo "configure:1527: checking for st_rdev in struct stat" >&5
if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1530 "configure" #line 1532 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
@ -1534,7 +1536,7 @@ int main() {
struct stat s; s.st_rdev; struct stat s; s.st_rdev;
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1538: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:1540: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
ac_cv_struct_st_rdev=yes ac_cv_struct_st_rdev=yes
else else
@ -1555,12 +1557,12 @@ EOF
fi fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
echo "configure:1559: checking whether time.h and sys/time.h may both be included" >&5 echo "configure:1561: checking whether time.h and sys/time.h may both be included" >&5
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1564 "configure" #line 1566 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sys/types.h> #include <sys/types.h>
#include <sys/time.h> #include <sys/time.h>
@ -1569,7 +1571,7 @@ int main() {
struct tm *tp; struct tm *tp;
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:1575: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
ac_cv_header_time=yes ac_cv_header_time=yes
else else
@ -1630,7 +1632,7 @@ if test "${enable_jobs+set}" = set; then
enableval="$enable_jobs" enableval="$enable_jobs"
JOBS=-j$enableval JOBS=-j$enableval
else else
JOBS= JOBS=-j2
fi fi
@ -1653,19 +1655,29 @@ else
fi fi
# Check whether --enable-debug or --disable-debug was given.
if test "${enable_debug+set}" = set; then
enableval="$enable_debug"
\
DEBUG=yes
else
DEBUG=no
fi
if [ "x$exec_prefix" = xNONE -a "x$prefix" = xNONE ]; if [ "x$exec_prefix" = xNONE -a "x$prefix" = xNONE ];
then exec_prefix=""; then exec_prefix="";
fi; fi;
if test $ac_cv_prog_gcc = yes; then if test $ac_cv_prog_gcc = yes; then
echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
echo "configure:1663: checking whether ${CC-cc} needs -traditional" >&5 echo "configure:1675: checking whether ${CC-cc} needs -traditional" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
ac_pattern="Autoconf.*'x'" ac_pattern="Autoconf.*'x'"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1669 "configure" #line 1681 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sgtty.h> #include <sgtty.h>
Autoconf TIOCGETP Autoconf TIOCGETP
@ -1683,7 +1695,7 @@ rm -f conftest*
if test $ac_cv_prog_gcc_traditional = no; then if test $ac_cv_prog_gcc_traditional = no; then
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1687 "configure" #line 1699 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <termio.h> #include <termio.h>
Autoconf TCGETA Autoconf TCGETA
@ -1705,12 +1717,12 @@ echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6
fi fi
echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
echo "configure:1709: checking return type of signal handlers" >&5 echo "configure:1721: checking return type of signal handlers" >&5
if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1714 "configure" #line 1726 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <sys/types.h> #include <sys/types.h>
#include <signal.h> #include <signal.h>
@ -1727,7 +1739,7 @@ int main() {
int i; int i;
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1731: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:1743: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
ac_cv_type_signal=void ac_cv_type_signal=void
else else
@ -1746,12 +1758,12 @@ EOF
echo $ac_n "checking for vprintf""... $ac_c" 1>&6 echo $ac_n "checking for vprintf""... $ac_c" 1>&6
echo "configure:1750: checking for vprintf" >&5 echo "configure:1762: checking for vprintf" >&5
if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1755 "configure" #line 1767 "configure"
#include "confdefs.h" #include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes, /* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vprintf(); below. */ which can conflict with char vprintf(); below. */
@ -1774,7 +1786,7 @@ vprintf();
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_func_vprintf=yes" eval "ac_cv_func_vprintf=yes"
else else
@ -1798,12 +1810,12 @@ fi
if test "$ac_cv_func_vprintf" != yes; then if test "$ac_cv_func_vprintf" != yes; then
echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
echo "configure:1802: checking for _doprnt" >&5 echo "configure:1814: checking for _doprnt" >&5
if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1807 "configure" #line 1819 "configure"
#include "confdefs.h" #include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes, /* System header to define __stub macros and hopefully few prototypes,
which can conflict with char _doprnt(); below. */ which can conflict with char _doprnt(); below. */
@ -1826,7 +1838,7 @@ _doprnt();
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1842: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_func__doprnt=yes" eval "ac_cv_func__doprnt=yes"
else else
@ -1853,12 +1865,12 @@ fi
for ac_func in mkdir rmdir uname for ac_func in mkdir rmdir uname
do do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1857: checking for $ac_func" >&5 echo "configure:1869: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1862 "configure" #line 1874 "configure"
#include "confdefs.h" #include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes, /* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */ which can conflict with char $ac_func(); below. */
@ -1881,7 +1893,7 @@ $ac_func();
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_func_$ac_func=yes" eval "ac_cv_func_$ac_func=yes"
else else
@ -1909,14 +1921,14 @@ done
if test x$READLINE = xyes; then if test x$READLINE = xyes; then
echo $ac_n "checking for library containing tgetent""... $ac_c" 1>&6 echo $ac_n "checking for library containing tgetent""... $ac_c" 1>&6
echo "configure:1913: checking for library containing tgetent" >&5 echo "configure:1925: checking for library containing tgetent" >&5
if eval "test \"`echo '$''{'ac_cv_search_tgetent'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_search_tgetent'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
ac_func_search_save_LIBS="$LIBS" ac_func_search_save_LIBS="$LIBS"
ac_cv_search_tgetent="no" ac_cv_search_tgetent="no"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1920 "configure" #line 1932 "configure"
#include "confdefs.h" #include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */ /* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2 /* We use char because int might match the return type of a gcc2
@ -1927,7 +1939,7 @@ int main() {
tgetent() tgetent()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
ac_cv_search_tgetent="none required" ac_cv_search_tgetent="none required"
else else
@ -1938,7 +1950,7 @@ rm -f conftest*
test "$ac_cv_search_tgetent" = "no" && for i in ncurses curses termcap termlib; do test "$ac_cv_search_tgetent" = "no" && for i in ncurses curses termcap termlib; do
LIBS="-l$i $ac_func_search_save_LIBS" LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1942 "configure" #line 1954 "configure"
#include "confdefs.h" #include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */ /* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2 /* We use char because int might match the return type of a gcc2
@ -1949,7 +1961,7 @@ int main() {
tgetent() tgetent()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:1953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
ac_cv_search_tgetent="-l$i" ac_cv_search_tgetent="-l$i"
break break
@ -1983,7 +1995,7 @@ fi
if test x$READLINE = xyes; then if test x$READLINE = xyes; then
echo $ac_n "checking for readline in -lreadline""... $ac_c" 1>&6 echo $ac_n "checking for readline in -lreadline""... $ac_c" 1>&6
echo "configure:1987: checking for readline in -lreadline" >&5 echo "configure:1999: checking for readline in -lreadline" >&5
ac_lib_var=`echo readline'_'readline | sed 'y%./+-%__p_%'` ac_lib_var=`echo readline'_'readline | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@ -1991,7 +2003,7 @@ else
ac_save_LIBS="$LIBS" ac_save_LIBS="$LIBS"
LIBS="-lreadline $LIBS" LIBS="-lreadline $LIBS"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1995 "configure" #line 2007 "configure"
#include "confdefs.h" #include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */ /* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2 /* We use char because int might match the return type of a gcc2
@ -2002,7 +2014,7 @@ int main() {
readline() readline()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:2006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:2018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes" eval "ac_cv_lib_$ac_lib_var=yes"
else else
@ -2039,12 +2051,12 @@ package as well (which may be called readline-devel or something similar).
fi fi
echo $ac_n "checking for rl_completion_matches""... $ac_c" 1>&6 echo $ac_n "checking for rl_completion_matches""... $ac_c" 1>&6
echo "configure:2043: checking for rl_completion_matches" >&5 echo "configure:2055: checking for rl_completion_matches" >&5
if eval "test \"`echo '$''{'ac_cv_func_rl_completion_matches'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_func_rl_completion_matches'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 2048 "configure" #line 2060 "configure"
#include "confdefs.h" #include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes, /* System header to define __stub macros and hopefully few prototypes,
which can conflict with char rl_completion_matches(); below. */ which can conflict with char rl_completion_matches(); below. */
@ -2067,7 +2079,7 @@ rl_completion_matches();
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:2071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:2083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
eval "ac_cv_func_rl_completion_matches=yes" eval "ac_cv_func_rl_completion_matches=yes"
else else
@ -2104,6 +2116,7 @@ fi
trap '' 1 2 15 trap '' 1 2 15
cat > confcache <<\EOF cat > confcache <<\EOF
# This file is a shell script that caches the results of configure # This file is a shell script that caches the results of configure
@ -2280,6 +2293,7 @@ s%@HAVE_RL_COMPLETION_MATCHES@%$HAVE_RL_COMPLETION_MATCHES%g
s%@OWNER@%$OWNER%g s%@OWNER@%$OWNER%g
s%@GROUP@%$GROUP%g s%@GROUP@%$GROUP%g
s%@LVM_VERSION@%$LVM_VERSION%g s%@LVM_VERSION@%$LVM_VERSION%g
s%@DEBUG@%$DEBUG%g
CEOF CEOF
EOF EOF

View File

@ -75,7 +75,7 @@ if [[ "x$LVM1" != xnone -a "x$LVM1" != xinternal -a "x$LVM1" != xshared ]];
exit exit
fi; fi;
AC_ARG_ENABLE(jobs, [ --enable-jobs=NUM Number of jobs to run simultaneously], JOBS=-j$enableval, JOBS=) AC_ARG_ENABLE(jobs, [ --enable-jobs=NUM Number of jobs to run simultaneously], JOBS=-j$enableval, JOBS=-j2)
dnl Enables staticly linked tools dnl Enables staticly linked tools
AC_ARG_ENABLE(static_link, [ --enable-static_link Use this to link the tools to the liblvm library AC_ARG_ENABLE(static_link, [ --enable-static_link Use this to link the tools to the liblvm library
@ -85,6 +85,10 @@ dnl Enable readline
AC_ARG_ENABLE(readline, [ --enable-readline Enable readline support], \ AC_ARG_ENABLE(readline, [ --enable-readline Enable readline support], \
READLINE=$enableval, READLINE=no) READLINE=$enableval, READLINE=no)
dnl Enable Debugging
AC_ARG_ENABLE(debug, [ --enable-debug Enable debugging], \
DEBUG=yes, DEBUG=no)
dnl Mess with default exec_prefix dnl Mess with default exec_prefix
if [[ "x$exec_prefix" = xNONE -a "x$prefix" = xNONE ]]; if [[ "x$exec_prefix" = xNONE -a "x$prefix" = xNONE ]];
then exec_prefix=""; then exec_prefix="";
@ -145,6 +149,7 @@ AC_SUBST(OWNER)
AC_SUBST(GROUP) AC_SUBST(GROUP)
AC_SUBST(LIBS) AC_SUBST(LIBS)
AC_SUBST(LVM_VERSION) AC_SUBST(LVM_VERSION)
AC_SUBST(DEBUG)
dnl First and last lines should not contain files to generate in order to dnl First and last lines should not contain files to generate in order to
dnl keep utility scripts running properly dnl keep utility scripts running properly
AC_OUTPUT( \ AC_OUTPUT( \

View File

@ -50,8 +50,8 @@ SOURCES=\
metadata/snapshot_manip.c \ metadata/snapshot_manip.c \
misc/crc.c \ misc/crc.c \
misc/lvm-file.c \ misc/lvm-file.c \
misc/lvm-string.c \
misc/sharedlib.c \ misc/sharedlib.c \
mm/dbg_malloc.c \
mm/pool.c \ mm/pool.c \
regex/matcher.c \ regex/matcher.c \
regex/parse_rx.c \ regex/parse_rx.c \
@ -70,6 +70,11 @@ ifeq ("@LVM1@", "internal")
format1/vg_number.c format1/vg_number.c
endif endif
ifeq ("@DEBUG@", "yes")
SOURCES+=\
mm/dbg_malloc.c
endif
TARGETS=liblvm.a TARGETS=liblvm.a
include ../make.tmpl include ../make.tmpl

View File

@ -22,12 +22,12 @@
static int _activation = 1; static int _activation = 1;
void set_activation(int activation) void set_activation(int act)
{ {
if (activation == _activation) if (act == _activation)
return; return;
_activation = activation; _activation = act;
if (_activation) if (_activation)
log_verbose("Activation enabled. Device-mapper kernel " log_verbose("Activation enabled. Device-mapper kernel "
"driver will be used."); "driver will be used.");
@ -36,7 +36,7 @@ void set_activation(int activation)
"interaction will be attempted."); "interaction will be attempted.");
} }
int activation() int activation(void)
{ {
return _activation; return _activation;
} }
@ -82,7 +82,7 @@ int driver_version(char *version, size_t size)
/* /*
* Returns 1 if info structure populated, else 0 on failure. * Returns 1 if info structure populated, else 0 on failure.
*/ */
int lv_info(struct logical_volume *lv, struct dm_info *info) int lv_info(const struct logical_volume *lv, struct dm_info *info)
{ {
int r; int r;
struct dev_manager *dm; struct dev_manager *dm;

View File

@ -11,7 +11,7 @@
#include <libdevmapper.h> #include <libdevmapper.h>
void set_activation(int activation); void set_activation(int activation);
int activation(); int activation(void);
int driver_version(char *version, size_t size); int driver_version(char *version, size_t size);
int library_version(char *version, size_t size); int library_version(char *version, size_t size);
@ -19,7 +19,7 @@ int library_version(char *version, size_t size);
/* /*
* Returns 1 if info structure has been populated, else 0. * Returns 1 if info structure has been populated, else 0.
*/ */
int lv_info(struct logical_volume *lv, struct dm_info *info); int lv_info(const struct logical_volume *lv, struct dm_info *info);
/* /*
* Returns 1 if percent has been set, else 0. * Returns 1 if percent has been set, else 0.
*/ */

View File

@ -68,7 +68,7 @@ struct dev_layer {
struct dm_info info; struct dm_info info;
/* lvid plus layer */ /* lvid plus layer */
char *dlid; const char *dlid;
struct logical_volume *lv; struct logical_volume *lv;
@ -242,7 +242,7 @@ static char *_find_lv_name(char *vg)
static char *_build_dlid(struct pool *mem, const char *lvid, const char *layer) static char *_build_dlid(struct pool *mem, const char *lvid, const char *layer)
{ {
char *dlid; char *dlid;
int len; size_t len;
if (!layer) if (!layer)
layer = ""; layer = "";
@ -392,7 +392,7 @@ static int _status(const char *name, const char *uuid,
return 0; return 0;
} }
static int _rename(struct dev_manager *dm, struct dev_layer *dl, char *newname) static int _rename(struct dev_layer *dl, char *newname)
{ {
int r = 1; int r = 1;
struct dm_task *dmt; struct dm_task *dmt;
@ -583,8 +583,8 @@ static int _emit_target(struct dm_task *dmt, struct lv_segment *seg)
uint64_t esize = seg->lv->vg->extent_size; uint64_t esize = seg->lv->vg->extent_size;
uint32_t s, stripes = seg->stripes; uint32_t s, stripes = seg->stripes;
int w = 0, tw = 0; int w = 0, tw = 0;
char *filler = "/dev/ioerror"; const char *filler = "/dev/ioerror";
char *target; const char *target = NULL;
if (stripes == 1) { if (stripes == 1) {
if (!seg->area[0].pv) { if (!seg->area[0].pv) {
@ -671,7 +671,7 @@ static int _populate_origin(struct dev_manager *dm,
log_debug("Adding target: 0 %" PRIu64 " snapshot-origin %s", log_debug("Adding target: 0 %" PRIu64 " snapshot-origin %s",
dl->lv->size, params); dl->lv->size, params);
if (!dm_task_add_target(dmt, 0, dl->lv->size, if (!dm_task_add_target(dmt, __UINT64_C(0), dl->lv->size,
"snapshot-origin", params)) { "snapshot-origin", params)) {
stack; stack;
return 0; return 0;
@ -711,7 +711,8 @@ static int _populate_snapshot(struct dev_manager *dm,
log_debug("Adding target: 0 %" PRIu64 " snapshot %s", log_debug("Adding target: 0 %" PRIu64 " snapshot %s",
s->origin->size, params); s->origin->size, params);
if (!dm_task_add_target(dmt, 0, s->origin->size, "snapshot", params)) { if (!dm_task_add_target
(dmt, __UINT64_C(0), s->origin->size, "snapshot", params)) {
stack; stack;
return 0; return 0;
} }
@ -767,7 +768,7 @@ void dev_manager_destroy(struct dev_manager *dm)
pool_destroy(dm->mem); pool_destroy(dm->mem);
} }
int dev_manager_info(struct dev_manager *dm, struct logical_volume *lv, int dev_manager_info(struct dev_manager *dm, const struct logical_volume *lv,
struct dm_info *info) struct dm_info *info)
{ {
char *name; char *name;
@ -843,7 +844,7 @@ int dev_manager_snapshot_percent(struct dev_manager *dm,
} }
static struct dev_layer *_create_dev(struct dev_manager *dm, char *name, static struct dev_layer *_create_dev(struct dev_manager *dm, char *name,
char *dlid) const char *dlid)
{ {
struct dev_layer *dl; struct dev_layer *dl;
char *uuid; char *uuid;
@ -952,7 +953,7 @@ static int _expand_origin_real(struct dev_manager *dm,
struct logical_volume *lv) struct logical_volume *lv)
{ {
struct dev_layer *dl; struct dev_layer *dl;
char *real_dlid; const char *real_dlid;
if (!(dl = _create_layer(dm, "real", lv))) { if (!(dl = _create_layer(dm, "real", lv))) {
stack; stack;
@ -1007,7 +1008,7 @@ static int _expand_snapshot(struct dev_manager *dm, struct logical_volume *lv,
* cow * cow
*/ */
struct dev_layer *dl; struct dev_layer *dl;
char *cow_dlid; const char *cow_dlid;
if (!(dl = _create_layer(dm, "cow", lv))) { if (!(dl = _create_layer(dm, "cow", lv))) {
stack; stack;
@ -1164,7 +1165,7 @@ static inline int _suspend_parent(struct dev_layer *parent)
* Recurses through the tree, ensuring that devices are created * Recurses through the tree, ensuring that devices are created
* in correct order. * in correct order.
*/ */
int _create_rec(struct dev_manager *dm, struct dev_layer *dl, static int _create_rec(struct dev_manager *dm, struct dev_layer *dl,
struct dev_layer *parent) struct dev_layer *parent)
{ {
struct list *sh; struct list *sh;
@ -1210,7 +1211,7 @@ int _create_rec(struct dev_manager *dm, struct dev_layer *dl,
suffix); suffix);
if (strcmp(newname, dl->name)) { if (strcmp(newname, dl->name)) {
if (!_suspend_parent(parent) || if (!_suspend_parent(parent) ||
!_suspend(dl) || !_rename(dm, dl, newname)) { !_suspend(dl) || !_rename(dl, newname)) {
stack; stack;
return 0; return 0;
} }
@ -1290,7 +1291,7 @@ static int _fill_in_remove_list(struct dev_manager *dm)
/* /*
* Layers are removed in a top-down manner. * Layers are removed in a top-down manner.
*/ */
int _remove_old_layers(struct dev_manager *dm) static int _remove_old_layers(struct dev_manager *dm)
{ {
int change; int change;
struct list *rh, *n; struct list *rh, *n;

View File

@ -25,7 +25,7 @@ void dev_manager_destroy(struct dev_manager *dm);
* (eg, an origin is created before its snapshot, but is not * (eg, an origin is created before its snapshot, but is not
* unsuspended until the snapshot is also created.) * unsuspended until the snapshot is also created.)
*/ */
int dev_manager_info(struct dev_manager *dm, struct logical_volume *lv, int dev_manager_info(struct dev_manager *dm, const struct logical_volume *lv,
struct dm_info *info); struct dm_info *info);
int dev_manager_snapshot_percent(struct dev_manager *dm, int dev_manager_snapshot_percent(struct dev_manager *dm,
struct logical_volume *lv, float *percent); struct logical_volume *lv, float *percent);

View File

@ -19,5 +19,4 @@ int fs_del_lv(struct logical_volume *lv);
int fs_rename_lv(struct logical_volume *lv, int fs_rename_lv(struct logical_volume *lv,
const char *dev, const char *old_name); const char *dev, const char *old_name);
#endif #endif

14
lib/cache/cache.c vendored
View File

@ -18,7 +18,7 @@ static struct hash_table *_vgname_hash = NULL;
static struct list _vginfos; static struct list _vginfos;
int _has_scanned = 0; int _has_scanned = 0;
int cache_init() int cache_init(void)
{ {
list_init(&_vginfos); list_init(&_vginfos);
@ -47,7 +47,7 @@ struct cache_vginfo *vginfo_from_vgname(const char *vgname)
return vginfo; return vginfo;
} }
struct format_type *fmt_from_vgname(const char *vgname) const struct format_type *fmt_from_vgname(const char *vgname)
{ {
struct cache_vginfo *vginfo; struct cache_vginfo *vginfo;
@ -91,7 +91,7 @@ static void _rescan_entry(struct cache_info *info)
label_read(info->dev, &label); label_read(info->dev, &label);
} }
static int _scan_invalid(struct cmd_context *cmd) static int _scan_invalid(void)
{ {
hash_iter(_pvid_hash, (iterate_fn) _rescan_entry); hash_iter(_pvid_hash, (iterate_fn) _rescan_entry);
@ -121,7 +121,7 @@ int cache_label_scan(struct cmd_context *cmd, int full_scan)
} }
if (_has_scanned && !full_scan) { if (_has_scanned && !full_scan) {
r = _scan_invalid(cmd); r = _scan_invalid();
goto out; goto out;
} }
@ -223,7 +223,7 @@ struct device *device_from_pvid(struct cmd_context *cmd, struct id *pvid)
return NULL; return NULL;
} }
void _drop_vginfo(struct cache_info *info) static void _drop_vginfo(struct cache_info *info)
{ {
if (!list_empty(&info->list)) { if (!list_empty(&info->list)) {
list_del(&info->list); list_del(&info->list);
@ -423,7 +423,7 @@ struct cache_info *cache_add(struct labeller *labeller, const char *pvid,
label = info->label; label = info->label;
} }
info->fmt = (struct format_type *) labeller->private; info->fmt = (const struct format_type *) labeller->private;
info->status |= CACHE_INVALID; info->status |= CACHE_INVALID;
if (!_cache_update_pvid(info, pvid_s)) { if (!_cache_update_pvid(info, pvid_s)) {
@ -467,7 +467,7 @@ static void _cache_destroy_vgnamelist(struct cache_vginfo *vginfo)
dbg_free(vginfo); dbg_free(vginfo);
} }
void cache_destroy() void cache_destroy(void)
{ {
_has_scanned = 0; _has_scanned = 0;

10
lib/cache/cache.h vendored
View File

@ -28,7 +28,7 @@ struct cache_vginfo {
struct list infos; /* List head for cache_infos */ struct list infos; /* List head for cache_infos */
char *vgname; /* "" == orphan */ char *vgname; /* "" == orphan */
char vgid[ID_LEN + 1]; char vgid[ID_LEN + 1];
struct format_type *fmt; const struct format_type *fmt;
}; };
struct cache_info { struct cache_info {
@ -37,14 +37,14 @@ struct cache_info {
struct list das; /* list head for data areas */ struct list das; /* list head for data areas */
struct cache_vginfo *vginfo; /* NULL == unknown */ struct cache_vginfo *vginfo; /* NULL == unknown */
struct label *label; struct label *label;
struct format_type *fmt; const struct format_type *fmt;
struct device *dev; struct device *dev;
uint64_t device_size; /* Bytes */ uint64_t device_size; /* Bytes */
uint32_t status; uint32_t status;
}; };
int cache_init(); int cache_init(void);
void cache_destroy(); void cache_destroy(void);
/* Set full_scan to 1 to reread every filtered device label */ /* Set full_scan to 1 to reread every filtered device label */
int cache_label_scan(struct cmd_context *cmd, int full_scan); int cache_label_scan(struct cmd_context *cmd, int full_scan);
@ -60,7 +60,7 @@ int cache_update_vgname(struct cache_info *info, const char *vgname);
int cache_update_vg(struct volume_group *vg); int cache_update_vg(struct volume_group *vg);
/* Queries */ /* Queries */
struct format_type *fmt_from_vgname(const char *vgname); const struct format_type *fmt_from_vgname(const char *vgname);
struct cache_vginfo *vginfo_from_vgname(const char *vgname); struct cache_vginfo *vginfo_from_vgname(const char *vgname);
struct cache_vginfo *vginfo_from_vgid(const char *vgid); struct cache_vginfo *vginfo_from_vgid(const char *vgid);
struct cache_info *info_from_pvid(const char *pvid); struct cache_info *info_from_pvid(const char *pvid);

View File

@ -13,4 +13,3 @@
#define ECMD_FAILED 5 #define ECMD_FAILED 5
#endif #endif

View File

@ -53,7 +53,7 @@ static int _get_env_vars(struct cmd_context *cmd)
static void _init_logging(struct cmd_context *cmd) static void _init_logging(struct cmd_context *cmd)
{ {
char *open_mode = "a"; const char *open_mode = "a";
time_t t; time_t t;
const char *log_file; const char *log_file;
@ -329,7 +329,7 @@ static int _init_formats(struct cmd_context *cmd)
struct config_node *cn; struct config_node *cn;
struct config_value *cv; struct config_value *cv;
struct format_type *(*init_format_fn) (struct cmd_context * cmd); struct format_type *(*init_format_fn) (struct cmd_context *);
void *lib; void *lib;
@ -452,7 +452,7 @@ struct cmd_context *create_toolcontext(struct arg *the_args)
return NULL; return NULL;
} }
void destroy_formats(struct list *formats) static void _destroy_formats(struct list *formats)
{ {
struct list *fmtl, *tmp; struct list *fmtl, *tmp;
struct format_type *fmt; struct format_type *fmt;
@ -475,7 +475,7 @@ void destroy_toolcontext(struct cmd_context *cmd)
cache_destroy(); cache_destroy();
label_exit(); label_exit();
destroy_formats(&cmd->formats); _destroy_formats(&cmd->formats);
cmd->filter->destroy(cmd->filter); cmd->filter->destroy(cmd->filter);
pool_destroy(cmd->mem); pool_destroy(cmd->mem);
dev_cache_exit(); dev_cache_exit();

View File

@ -45,7 +45,7 @@ struct cmd_context {
/* format handler allocates all objects from here */ /* format handler allocates all objects from here */
struct pool *mem; struct pool *mem;
struct format_type *fmt; /* Current format to use by default */ const struct format_type *fmt; /* Current format to use by default */
struct format_type *fmt_backup; /* Format to use for backups */ struct format_type *fmt_backup; /* Format to use for backups */
struct list formats; /* Available formats */ struct list formats; /* Available formats */

View File

@ -112,12 +112,12 @@ void destroy_config_tree(struct config_tree *cf)
} }
int read_config_fd(struct config_tree *cf, int fd, const char *file, int read_config_fd(struct config_tree *cf, int fd, const char *file,
off_t offset, uint32_t size, off_t offset2, uint32_t size2, off_t offset, size_t size, off_t offset2, size_t size2,
checksum_fn_t checksum_fn, uint32_t checksum) checksum_fn_t checksum_fn, uint32_t checksum)
{ {
struct cs *c = (struct cs *) cf; struct cs *c = (struct cs *) cf;
struct parser *p; struct parser *p;
off_t mmap_offset; off_t mmap_offset = 0;
int r = 0; int r = 0;
if (!(p = pool_alloc(c->mem, sizeof(*p)))) { if (!(p = pool_alloc(c->mem, sizeof(*p)))) {
@ -223,7 +223,7 @@ int read_config_file(struct config_tree *cf, const char *file)
return 0; return 0;
} }
r = read_config_fd(cf, fd, file, 0, info.st_size, 0, 0, r = read_config_fd(cf, fd, file, 0, (size_t) info.st_size, 0, 0,
(checksum_fn_t) NULL, 0); (checksum_fn_t) NULL, 0);
close(fd); close(fd);
@ -283,8 +283,8 @@ int reload_config_file(struct config_tree **cf)
return 0; return 0;
} }
r = read_config_fd(new_cf, fd, c->filename, 0, info.st_size, 0, 0, r = read_config_fd(new_cf, fd, c->filename, 0, (size_t) info.st_size,
(checksum_fn_t) NULL, 0); 0, 0, (checksum_fn_t) NULL, 0);
close(fd); close(fd);
if (r) { if (r) {
@ -668,7 +668,7 @@ static struct config_node *_create_node(struct parser *p)
static char *_dup_tok(struct parser *p) static char *_dup_tok(struct parser *p)
{ {
int len = p->te - p->tb; size_t len = p->te - p->tb;
char *str = pool_alloc(p->mem, len + 1); char *str = pool_alloc(p->mem, len + 1);
if (!str) { if (!str) {
stack; stack;
@ -683,7 +683,7 @@ static char *_dup_tok(struct parser *p)
* utility functions * utility functions
*/ */
struct config_node *find_config_node(struct config_node *cn, struct config_node *find_config_node(struct config_node *cn,
const char *path, char sep) const char *path, const int sep)
{ {
const char *e; const char *e;
@ -715,7 +715,7 @@ struct config_node *find_config_node(struct config_node *cn,
} }
const char *find_config_str(struct config_node *cn, const char *find_config_str(struct config_node *cn,
const char *path, const char sep, const char *fail) const char *path, const int sep, const char *fail)
{ {
struct config_node *n = find_config_node(cn, path, sep); struct config_node *n = find_config_node(cn, path, sep);
@ -732,7 +732,7 @@ const char *find_config_str(struct config_node *cn,
} }
int find_config_int(struct config_node *cn, const char *path, int find_config_int(struct config_node *cn, const char *path,
char sep, int fail) const int sep, int fail)
{ {
struct config_node *n = find_config_node(cn, path, sep); struct config_node *n = find_config_node(cn, path, sep);
@ -747,7 +747,7 @@ int find_config_int(struct config_node *cn, const char *path,
} }
float find_config_float(struct config_node *cn, const char *path, float find_config_float(struct config_node *cn, const char *path,
char sep, float fail) const int sep, float fail)
{ {
struct config_node *n = find_config_node(cn, path, sep); struct config_node *n = find_config_node(cn, path, sep);
@ -790,7 +790,7 @@ static int _str_to_bool(const char *str, int fail)
} }
int find_config_bool(struct config_node *cn, const char *path, int find_config_bool(struct config_node *cn, const char *path,
char sep, int fail) const int sep, int fail)
{ {
struct config_node *n = find_config_node(cn, path, sep); struct config_node *n = find_config_node(cn, path, sep);
struct config_value *v; struct config_value *v;
@ -812,7 +812,7 @@ int find_config_bool(struct config_node *cn, const char *path,
} }
int get_config_uint32(struct config_node *cn, const char *path, int get_config_uint32(struct config_node *cn, const char *path,
char sep, uint32_t *result) const int sep, uint32_t *result)
{ {
struct config_node *n; struct config_node *n;
@ -826,7 +826,7 @@ int get_config_uint32(struct config_node *cn, const char *path,
} }
int get_config_uint64(struct config_node *cn, const char *path, int get_config_uint64(struct config_node *cn, const char *path,
char sep, uint64_t *result) const int sep, uint64_t *result)
{ {
struct config_node *n; struct config_node *n;
@ -841,7 +841,7 @@ int get_config_uint64(struct config_node *cn, const char *path,
} }
int get_config_str(struct config_node *cn, const char *path, int get_config_str(struct config_node *cn, const char *path,
char sep, char **result) const int sep, char **result)
{ {
struct config_node *n; struct config_node *n;

View File

@ -43,7 +43,7 @@ void destroy_config_tree(struct config_tree *cf);
typedef uint32_t (*checksum_fn_t) (uint32_t initial, void *buf, uint32_t size); typedef uint32_t (*checksum_fn_t) (uint32_t initial, void *buf, uint32_t size);
int read_config_fd(struct config_tree *cf, int fd, const char *file, int read_config_fd(struct config_tree *cf, int fd, const char *file,
off_t offset, uint32_t size, off_t offset2, uint32_t size2, off_t offset, size_t size, off_t offset2, size_t size2,
checksum_fn_t checksum_fn, uint32_t checksum); checksum_fn_t checksum_fn, uint32_t checksum);
int read_config_file(struct config_tree *cf, const char *file); int read_config_file(struct config_tree *cf, const char *file);
@ -51,31 +51,31 @@ int write_config_file(struct config_tree *cf, const char *file);
int reload_config_file(struct config_tree **cf); int reload_config_file(struct config_tree **cf);
struct config_node *find_config_node(struct config_node *cn, struct config_node *find_config_node(struct config_node *cn,
const char *path, char separator); const char *path, const int separator);
const char *find_config_str(struct config_node *cn, const char *find_config_str(struct config_node *cn,
const char *path, const char sep, const char *fail); const char *path, const int sep, const char *fail);
int find_config_int(struct config_node *cn, const char *path, int find_config_int(struct config_node *cn, const char *path,
char sep, int fail); const int sep, int fail);
float find_config_float(struct config_node *cn, const char *path, float find_config_float(struct config_node *cn, const char *path,
char sep, float fail); const int sep, float fail);
/* /*
* Understands (0, ~0), (y, n), (yes, no), (on, * Understands (0, ~0), (y, n), (yes, no), (on,
* off), (true, false). * off), (true, false).
*/ */
int find_config_bool(struct config_node *cn, const char *path, int find_config_bool(struct config_node *cn, const char *path,
char sep, int fail); const int sep, int fail);
int get_config_uint32(struct config_node *cn, const char *path, int get_config_uint32(struct config_node *cn, const char *path,
char sep, uint32_t *result); const int sep, uint32_t *result);
int get_config_uint64(struct config_node *cn, const char *path, int get_config_uint64(struct config_node *cn, const char *path,
char sep, uint64_t *result); const int sep, uint64_t *result);
int get_config_str(struct config_node *cn, const char *path, int get_config_str(struct config_node *cn, const char *path,
char sep, char **result); const int sep, char **result);
#endif #endif

View File

@ -31,9 +31,10 @@
#define DEFAULT_FORMAT "lvm2" #define DEFAULT_FORMAT "lvm2"
#endif #endif
#define DEFAULT_STRIPESIZE 64 /* KB */
#define DEFAULT_PVMETADATASIZE 255 #define DEFAULT_PVMETADATASIZE 255
#define DEFAULT_PVMETADATACOPIES 1 #define DEFAULT_PVMETADATACOPIES 1
#define DEFAULT_LABELSECTOR 1 #define DEFAULT_LABELSECTOR __UINT64_C(1)
#define DEFAULT_MSG_PREFIX " " #define DEFAULT_MSG_PREFIX " "
#define DEFAULT_CMD_NAME 0 #define DEFAULT_CMD_NAME 0

View File

@ -12,8 +12,8 @@
bitset_t bitset_create(struct pool *mem, unsigned num_bits) bitset_t bitset_create(struct pool *mem, unsigned num_bits)
{ {
int n = (num_bits / BITS_PER_INT) + 2; unsigned n = (num_bits / BITS_PER_INT) + 2;
int size = sizeof(int) * n; size_t size = sizeof(int) * n;
unsigned *bs = pool_zalloc(mem, size); unsigned *bs = pool_zalloc(mem, size);
if (!bs) if (!bs)

View File

@ -15,12 +15,12 @@
typedef uint32_t *bitset_t; typedef uint32_t *bitset_t;
bitset_t bitset_create(struct pool *mem, unsigned num_bits); bitset_t bitset_create(struct pool *mem, unsigned num_bits);
void bitset_destroy(bitset_t bs);
void bit_union(bitset_t out, bitset_t in1, bitset_t in2); void bit_union(bitset_t out, bitset_t in1, bitset_t in2);
int bit_get_first(bitset_t bs); int bit_get_first(bitset_t bs);
int bit_get_next(bitset_t bs, int last_bit); int bit_get_next(bitset_t bs, int last_bit);
#define BITS_PER_INT (sizeof(int) * CHAR_BIT) #define BITS_PER_INT (sizeof(int) * CHAR_BIT)
#define bit(bs, i) \ #define bit(bs, i) \

View File

@ -46,7 +46,7 @@ static uint32_t _shuffle(uint32_t k)
#endif #endif
} }
struct node **_lookup(struct node **c, uint32_t key, struct node **p) static struct node **_lookup(struct node **c, uint32_t key, struct node **p)
{ {
*p = NULL; *p = NULL;
while (*c) { while (*c) {

View File

@ -59,9 +59,9 @@ static struct hash_node *_create_node(const char *str)
return n; return n;
} }
static unsigned _hash(const char *str, int len) static unsigned _hash(const char *str, unsigned len)
{ {
unsigned long int h = 0, g; unsigned long h = 0, g;
while (*str && len--) { while (*str && len--) {
h <<= 4; h <<= 4;
h += _nums[(int) *str++]; h += _nums[(int) *str++];
@ -126,7 +126,7 @@ void hash_destroy(struct hash_table *t)
} }
static inline struct hash_node **_find_fixed(struct hash_table *t, static inline struct hash_node **_find_fixed(struct hash_table *t,
const char *key, uint32_t len) const char *key, unsigned len)
{ {
unsigned h = _hash(key, len) & (t->num_slots - 1); unsigned h = _hash(key, len) & (t->num_slots - 1);
struct hash_node **c; struct hash_node **c;
@ -143,7 +143,7 @@ static inline struct hash_node **_find(struct hash_table *t, const char *key)
return _find_fixed(t, key, strlen(key)); return _find_fixed(t, key, strlen(key));
} }
void *hash_lookup_fixed(struct hash_table *t, const char *key, uint32_t len) void *hash_lookup_fixed(struct hash_table *t, const char *key, unsigned len)
{ {
struct hash_node **c = _find_fixed(t, key, len); struct hash_node **c = _find_fixed(t, key, len);
return *c ? (*c)->data : 0; return *c ? (*c)->data : 0;
@ -220,7 +220,7 @@ void *hash_get_data(struct hash_table *t, struct hash_node *n)
return n->data; return n->data;
} }
static struct hash_node *_next_slot(struct hash_table *t, unsigned int s) static struct hash_node *_next_slot(struct hash_table *t, unsigned s)
{ {
struct hash_node *c = NULL; struct hash_node *c = NULL;
int i; int i;
@ -238,6 +238,6 @@ struct hash_node *hash_get_first(struct hash_table *t)
struct hash_node *hash_get_next(struct hash_table *t, struct hash_node *n) struct hash_node *hash_get_next(struct hash_table *t, struct hash_node *n)
{ {
unsigned int h = _hash(n->key, strlen(n->key)) & (t->num_slots - 1); unsigned h = _hash(n->key, strlen(n->key)) & (t->num_slots - 1);
return n->next ? n->next : _next_slot(t, h + 1); return n->next ? n->next : _next_slot(t, h + 1);
} }

View File

@ -36,4 +36,3 @@ struct hash_node *hash_get_next(struct hash_table *t, struct hash_node *n);
v = hash_get_next(h, v)) v = hash_get_next(h, v))
#endif #endif

View File

@ -7,8 +7,6 @@
#ifndef _LVM_LIST_H #ifndef _LVM_LIST_H
#define _LVM_LIST_H #define _LVM_LIST_H
#include <assert.h>
struct list { struct list {
struct list *n, *p; struct list *n, *p;
}; };
@ -62,10 +60,10 @@ static inline int list_end(struct list *head, struct list *elem)
#define list_iterate_safe(v, t, head) \ #define list_iterate_safe(v, t, head) \
for (v = (head)->n, t = v->n; v != head; v = t, t = v->n) for (v = (head)->n, t = v->n; v != head; v = t, t = v->n)
static inline int list_size(struct list *head) static inline unsigned int list_size(const struct list *head)
{ {
int s = 0; unsigned int s = 0;
struct list *v; const struct list *v;
list_iterate(v, head) list_iterate(v, head)
s++; s++;

View File

@ -92,14 +92,15 @@ static int _insert_dev(const char *path, dev_t d)
struct device *dev; struct device *dev;
/* is this device already registered ? */ /* is this device already registered ? */
if (!(dev = (struct device *) btree_lookup(_cache.devices, d))) { if (!(dev = (struct device *) btree_lookup(_cache.devices,
(uint32_t) d))) {
/* create new device */ /* create new device */
if (!(dev = _create_dev(d))) { if (!(dev = _create_dev(d))) {
stack; stack;
return 0; return 0;
} }
if (!(btree_insert(_cache.devices, d, dev))) { if (!(btree_insert(_cache.devices, (uint32_t) d, dev))) {
log_err("Couldn't insert device into binary tree."); log_err("Couldn't insert device into binary tree.");
_free(dev); _free(dev);
return 0; return 0;
@ -121,7 +122,7 @@ static int _insert_dev(const char *path, dev_t d)
static char *_join(const char *dir, const char *name) static char *_join(const char *dir, const char *name)
{ {
int len = strlen(dir) + strlen(name) + 2; size_t len = strlen(dir) + strlen(name) + 2;
char *r = dbg_malloc(len); char *r = dbg_malloc(len);
if (r) if (r)
snprintf(r, len, "%s/%s", dir, name); snprintf(r, len, "%s/%s", dir, name);
@ -273,7 +274,7 @@ int dev_cache_init(void)
return 0; return 0;
} }
void _check_closed(struct device *dev) static void _check_closed(struct device *dev)
{ {
if (dev->fd >= 0) if (dev->fd >= 0)
log_err("Device '%s' has been left open.", dev_name(dev)); log_err("Device '%s' has been left open.", dev_name(dev));

View File

@ -20,7 +20,6 @@ struct dev_filter {
void *private; void *private;
}; };
/* /*
* The global device cache. * The global device cache.
*/ */
@ -34,7 +33,6 @@ int dev_cache_has_scanned(void);
int dev_cache_add_dir(const char *path); int dev_cache_add_dir(const char *path);
struct device *dev_cache_get(const char *name, struct dev_filter *f); struct device *dev_cache_get(const char *name, struct dev_filter *f);
/* /*
* Object for iterating through the cache. * Object for iterating through the cache.
*/ */

View File

@ -9,12 +9,18 @@
#include "lvm-types.h" #include "lvm-types.h"
#include "metadata.h" #include "metadata.h"
#include <limits.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <linux/unistd.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <linux/fs.h> // UGH!!! for BLKSSZGET #include <linux/fs.h> // UGH!!! for BLKSSZGET
/* FIXME 64 bit offset!!!
_syscall5(int, _llseek, uint, fd, ulong, hi, ulong, lo, loff_t *, res, uint, wh);
*/
int dev_get_size(struct device *dev, uint64_t *size) int dev_get_size(struct device *dev, uint64_t *size)
{ {
int fd; int fd;
@ -123,15 +129,14 @@ int dev_close(struct device *dev)
return 1; return 1;
} }
/* ssize_t raw_read(int fd, void *buf, size_t count)
* FIXME: factor common code out.
*/
int raw_read(int fd, void *buf, size_t count)
{ {
size_t n = 0; ssize_t n = 0, tot = 0;
int tot = 0;
while (tot < count) { if (count > SSIZE_MAX)
return -1;
while (tot < (signed) count) {
do do
n = read(fd, buf, count - tot); n = read(fd, buf, count - tot);
while ((n < 0) && ((errno == EINTR) || (errno == EAGAIN))); while ((n < 0) && ((errno == EINTR) || (errno == EAGAIN)));
@ -146,18 +151,19 @@ int raw_read(int fd, void *buf, size_t count)
return tot; return tot;
} }
int64_t dev_read(struct device * dev, uint64_t offset, ssize_t dev_read(struct device *dev, uint64_t offset, size_t len, void *buffer)
int64_t len, void *buffer)
{ {
const char *name = dev_name(dev); const char *name = dev_name(dev);
int fd = dev->fd; int fd = dev->fd;
/* loff_t pos; */
if (fd < 0) { if (fd < 0) {
log_err("Attempt to read an unopened device (%s).", name); log_err("Attempt to read an unopened device (%s).", name);
return 0; return 0;
} }
if (lseek(fd, offset, SEEK_SET) < 0) { /* if (_llseek((unsigned) fd, (ulong) (offset >> 32), (ulong) (offset & 0xFFFFFFFF), &pos, SEEK_SET) < 0) { */
if (lseek(fd, (off_t) offset, SEEK_SET) < 0) {
log_sys_error("lseek", name); log_sys_error("lseek", name);
return 0; return 0;
} }
@ -165,7 +171,7 @@ int64_t dev_read(struct device * dev, uint64_t offset,
return raw_read(fd, buffer, len); return raw_read(fd, buffer, len);
} }
int _write(int fd, const void *buf, size_t count) static int _write(int fd, const void *buf, size_t count)
{ {
ssize_t n = 0; ssize_t n = 0;
int tot = 0; int tot = 0;
@ -189,8 +195,8 @@ int _write(int fd, const void *buf, size_t count)
return tot; return tot;
} }
int64_t dev_write(struct device * dev, uint64_t offset, int64_t dev_write(struct device * dev, uint64_t offset, size_t len,
int64_t len, void *buffer) void *buffer)
{ {
const char *name = dev_name(dev); const char *name = dev_name(dev);
int fd = dev->fd; int fd = dev->fd;
@ -200,7 +206,7 @@ int64_t dev_write(struct device * dev, uint64_t offset,
return 0; return 0;
} }
if (lseek(fd, offset, SEEK_SET) < 0) { if (lseek(fd, (off_t) offset, SEEK_SET) < 0) {
log_sys_error("lseek", name); log_sys_error("lseek", name);
return 0; return 0;
} }
@ -210,9 +216,10 @@ int64_t dev_write(struct device * dev, uint64_t offset,
return _write(fd, buffer, len); return _write(fd, buffer, len);
} }
int dev_zero(struct device *dev, uint64_t offset, int64_t len) int dev_zero(struct device *dev, uint64_t offset, size_t len)
{ {
int64_t r, s; int64_t r;
size_t s;
char buffer[4096]; char buffer[4096];
int already_open; int already_open;
@ -223,7 +230,7 @@ int dev_zero(struct device *dev, uint64_t offset, int64_t len)
return 0; return 0;
} }
if (lseek(dev->fd, offset, SEEK_SET) < 0) { if (lseek(dev->fd, (off_t) offset, SEEK_SET) < 0) {
log_sys_error("lseek", dev_name(dev)); log_sys_error("lseek", dev_name(dev));
if (!already_open && !dev_close(dev)) if (!already_open && !dev_close(dev))
stack; stack;
@ -231,10 +238,10 @@ int dev_zero(struct device *dev, uint64_t offset, int64_t len)
} }
if ((offset % SECTOR_SIZE) || (len % SECTOR_SIZE)) if ((offset % SECTOR_SIZE) || (len % SECTOR_SIZE))
log_debug("Wiping %s at %" PRIu64 " length %" PRId64, log_debug("Wiping %s at %" PRIu64 " length %u",
dev_name(dev), offset, len); dev_name(dev), offset, len);
else else
log_debug("Wiping %s at sector %" PRIu64 " length %" PRId64 log_debug("Wiping %s at sector %" PRIu64 " length %u"
" sectors", dev_name(dev), offset >> SECTOR_SHIFT, " sectors", dev_name(dev), offset >> SECTOR_SHIFT,
len >> SECTOR_SHIFT); len >> SECTOR_SHIFT);

View File

@ -53,15 +53,14 @@ static inline int dev_fd(struct device *dev)
return dev->fd; return dev->fd;
} }
int raw_read(int fd, void *buf, size_t count); ssize_t raw_read(int fd, void *buf, size_t count);
int64_t dev_read(struct device *dev, ssize_t dev_read(struct device *dev, uint64_t offset, size_t len, void *buffer);
uint64_t offset, int64_t len, void *buffer); int64_t dev_write(struct device *dev, uint64_t offset, size_t len,
int64_t dev_write(struct device *dev, void *buffer);
uint64_t offset, int64_t len, void *buffer); int dev_zero(struct device *dev, uint64_t offset, size_t len);
int dev_zero(struct device *dev, uint64_t offset, int64_t len);
static inline const char *dev_name(struct device *dev) static inline const char *dev_name(const struct device *dev)
{ {
return (dev) ? list_item(dev->aliases.n, struct str_list)->str : return (dev) ? list_item(dev->aliases.n, struct str_list)->str :
"unknown device"; "unknown device";
@ -70,14 +69,20 @@ static inline const char *dev_name(struct device *dev)
/* Return a valid device name from the alias list; NULL otherwise */ /* Return a valid device name from the alias list; NULL otherwise */
const char *dev_name_confirmed(struct device *dev); const char *dev_name_confirmed(struct device *dev);
static inline int is_lvm_partition(const char *name)
{
return 1;
}
static inline int dev_is_open(struct device *dev) static inline int dev_is_open(struct device *dev)
{ {
return dev->fd >= 0 ? 1 : 0; return dev->fd >= 0 ? 1 : 0;
} }
/* FIXME Check partition type if appropriate */
#define is_lvm_partition(a) 1
/*
static inline int is_lvm_partition(const char *name)
{
return 1;
}
*/
#endif #endif

View File

@ -51,65 +51,66 @@ static int _num_segtypes = sizeof(_segtypes) / sizeof(*_segtypes);
uint64_t units_to_bytes(const char *units, char *unit_type) uint64_t units_to_bytes(const char *units, char *unit_type)
{ {
char *ptr = NULL;
char *ptr;
uint64_t v; uint64_t v;
ptr = (char *) units;
if (isdigit(*units)) { if (isdigit(*units)) {
v = (uint64_t) strtod(units, &ptr); v = (uint64_t) strtod(units, &ptr);
if (ptr == units) if (ptr == units)
return 0; return 0;
units = ptr;
} else } else
v = 1; v = 1;
if (v == 1) if (v == 1)
*unit_type = *ptr; *unit_type = *units;
else else
*unit_type = 'U'; *unit_type = 'U';
switch (*ptr) { switch (*units) {
case 'h': case 'h':
case 'H': case 'H':
v = 1ULL; v = __UINT64_C(1);
*unit_type = *ptr; *unit_type = *units;
break; break;
case 's': case 's':
v *= SECTOR_SIZE; v *= SECTOR_SIZE;
case 'b': case 'b':
case 'B': case 'B':
v *= 1ULL; v *= __UINT64_C(1);
break; break;
#define KILO __UINT64_C(1024)
case 'k': case 'k':
v *= 1024ULL; v *= KILO;
break;
case 'm': case 'm':
v *= 1024ULL * 1024ULL; v *= KILO * KILO;
break; break;
case 'g': case 'g':
v *= 1024ULL * 1024ULL * 1024ULL; v *= KILO * KILO * KILO;
break; break;
case 't': case 't':
v *= 1024ULL * 1024ULL * 1024ULL * 1024ULL; v *= KILO * KILO * KILO * KILO;
break; break;
#undef KILO
#define KILO __UINT64_C(1000)
case 'K': case 'K':
v *= 1000ULL; v *= KILO;
break; break;
case 'M': case 'M':
v *= 1000ULL * 1000ULL; v *= KILO * KILO;
break; break;
case 'G': case 'G':
v *= 1000ULL * 1000ULL * 1000ULL; v *= KILO * KILO * KILO;
break; break;
case 'T': case 'T':
v *= 1000ULL * 1000ULL * 1000ULL * 1000ULL; v *= KILO * KILO * KILO * KILO;
break; break;
#undef KILO
default: default:
return 0; return 0;
} }
if (*(ptr + 1)) if (*(units + 1))
return 0; return 0;
return v; return v;
@ -166,9 +167,9 @@ const char *display_size(struct cmd_context *cmd, uint64_t size, size_len_t sl)
int s; int s;
int suffix = 1; int suffix = 1;
uint64_t byte; uint64_t byte;
uint64_t units = 1024ULL; uint64_t units = __UINT64_C(1024);
char *size_buf = NULL; char *size_buf = NULL;
char *size_str[][3] = { const char *size_str[][3] = {
{" Terabyte", " TB", "T"}, {" Terabyte", " TB", "T"},
{" Gigabyte", " GB", "G"}, {" Gigabyte", " GB", "G"},
{" Megabyte", " MB", "M"}, {" Megabyte", " MB", "M"},
@ -192,20 +193,20 @@ const char *display_size(struct cmd_context *cmd, uint64_t size, size_len_t sl)
*size_str[s][2]) *size_str[s][2])
break; break;
if (size == 0ULL) { if (size == __UINT64_C(0)) {
sprintf(size_buf, "0%s", suffix ? size_str[s][sl] : ""); sprintf(size_buf, "0%s", suffix ? size_str[s][sl] : "");
return size_buf; return size_buf;
} }
if (s < 8) { if (s < 8) {
byte = cmd->current_settings.unit_factor; byte = cmd->current_settings.unit_factor;
size *= 1024ULL; size *= __UINT64_C(1024);
} else { } else {
suffix = 1; suffix = 1;
if (cmd->current_settings.unit_type == 'H') if (cmd->current_settings.unit_type == 'H')
units = 1000ULL; units = __UINT64_C(1000);
else else
units = 1024ULL; units = __UINT64_C(1024);
byte = units * units * units; byte = units * units * units;
s = 0; s = 0;
while (size_str[s] && size < byte) while (size_str[s] && size < byte)
@ -230,7 +231,7 @@ void pvdisplay_colons(struct physical_volume *pv)
return; return;
} }
log_print("%s:%s:%" PRIu64 ":-1:%u:%u:-1:%" PRIu64 ":%u:%u:%u:%s", log_print("%s:%s:%" PRIu64 ":-1:%u:%u:-1:%" PRIu32 ":%u:%u:%u:%s",
dev_name(pv->dev), pv->vg_name, pv->size, dev_name(pv->dev), pv->vg_name, pv->size,
/* FIXME pv->pv_number, Derive or remove? */ /* FIXME pv->pv_number, Derive or remove? */
pv->status, /* FIXME Support old or new format here? */ pv->status, /* FIXME Support old or new format here? */
@ -251,7 +252,7 @@ void pvdisplay_full(struct cmd_context *cmd, struct physical_volume *pv,
char uuid[64]; char uuid[64];
const char *size; const char *size;
uint64_t pe_free; uint32_t pe_free;
if (!pv) if (!pv)
return; return;
@ -296,9 +297,9 @@ void pvdisplay_full(struct cmd_context *cmd, struct physical_volume *pv,
/* LV count is no longer available when displaying PV /* LV count is no longer available when displaying PV
log_print("Cur LV %u", vg->lv_count); log_print("Cur LV %u", vg->lv_count);
*/ */
log_print("PE Size (KByte) %" PRIu64, pv->pe_size / 2); log_print("PE Size (KByte) %" PRIu32, pv->pe_size / 2);
log_print("Total PE %u", pv->pe_count); log_print("Total PE %u", pv->pe_count);
log_print("Free PE %" PRIu64, pe_free); log_print("Free PE %" PRIu32, pe_free);
log_print("Allocated PE %u", pv->pe_alloc_count); log_print("Allocated PE %u", pv->pe_alloc_count);
log_print("PV UUID %s", *uuid ? uuid : "none"); log_print("PV UUID %s", *uuid ? uuid : "none");
log_print(" "); log_print(" ");
@ -437,7 +438,8 @@ int lvdisplay_full(struct cmd_context *cmd, struct logical_volume *lv,
snap_percent = 100; snap_percent = 100;
log_print("Snapshot chunk size %s", log_print("Snapshot chunk size %s",
display_size(cmd, snap->chunk_size / 2, SIZE_SHORT)); display_size(cmd, (uint64_t) snap->chunk_size / 2,
SIZE_SHORT));
/* /*
size = display_size(lv->size / 2, SIZE_SHORT); size = display_size(lv->size / 2, SIZE_SHORT);
@ -471,7 +473,7 @@ int lvdisplay_full(struct cmd_context *cmd, struct logical_volume *lv,
return 0; return 0;
} }
void _display_stripe(struct lv_segment *seg, int s, const char *pre) static void _display_stripe(struct lv_segment *seg, uint32_t s, const char *pre)
{ {
uint32_t len = seg->len / seg->stripes; uint32_t len = seg->len / seg->stripes;
@ -485,7 +487,7 @@ void _display_stripe(struct lv_segment *seg, int s, const char *pre)
int lvdisplay_segments(struct logical_volume *lv) int lvdisplay_segments(struct logical_volume *lv)
{ {
int s; uint32_t s;
struct list *segh; struct list *segh;
struct lv_segment *seg; struct lv_segment *seg;
@ -589,7 +591,8 @@ void vgdisplay_full(struct volume_group *vg)
2), SIZE_SHORT)); 2), SIZE_SHORT));
log_print("PE Size %s", log_print("PE Size %s",
display_size(vg->cmd, vg->extent_size / 2, SIZE_SHORT)); display_size(vg->cmd, (uint64_t) vg->extent_size / 2,
SIZE_SHORT));
log_print("Total PE %u", vg->extent_count); log_print("Total PE %u", vg->extent_count);
@ -631,13 +634,15 @@ void vgdisplay_short(struct volume_group *vg)
{ {
log_print("\"%s\" %-9s [%-9s used / %s free]", vg->name, log_print("\"%s\" %-9s [%-9s used / %s free]", vg->name,
/********* FIXME if "open" print "/used" else print "/idle"??? ******/ /********* FIXME if "open" print "/used" else print "/idle"??? ******/
display_size(vg->cmd, vg->extent_count * vg->extent_size / 2, display_size(vg->cmd, (uint64_t) vg->extent_count *
vg->extent_size / 2, SIZE_SHORT),
display_size(vg->cmd,
((uint64_t) vg->extent_count -
vg->free_count) * vg->extent_size / 2,
SIZE_SHORT), display_size(vg->cmd, SIZE_SHORT), display_size(vg->cmd,
(vg->extent_count - (uint64_t) vg->
vg->free_count) * free_count *
vg->extent_size / 2, vg->extent_size / 2,
SIZE_SHORT),
display_size(vg->cmd, vg->free_count * vg->extent_size / 2,
SIZE_SHORT)); SIZE_SHORT));
return; return;
} }

View File

@ -19,7 +19,7 @@ struct rfilter {
}; };
static int _extract_pattern(struct pool *mem, const char *pat, static int _extract_pattern(struct pool *mem, const char *pat,
char **regex, bitset_t accept, int index) char **regex, bitset_t accept, int ix)
{ {
char sep, *r, *ptr; char sep, *r, *ptr;
@ -28,11 +28,11 @@ static int _extract_pattern(struct pool *mem, const char *pat,
*/ */
switch (*pat) { switch (*pat) {
case 'a': case 'a':
bit_set(accept, index); bit_set(accept, ix);
break; break;
case 'r': case 'r':
bit_clear(accept, index); bit_clear(accept, ix);
break; break;
default: default:
@ -80,7 +80,7 @@ static int _extract_pattern(struct pool *mem, const char *pat,
} }
*ptr = '\0'; *ptr = '\0';
regex[index] = r; regex[ix] = r;
return 1; return 1;
} }
@ -89,7 +89,8 @@ static int _build_matcher(struct rfilter *rf, struct config_value *val)
struct pool *scratch; struct pool *scratch;
struct config_value *v; struct config_value *v;
char **regex; char **regex;
int count = 0, i, r = 0; unsigned count = 0;
int i, r = 0;
if (!(scratch = pool_create(1024))) { if (!(scratch = pool_create(1024))) {
stack; stack;

View File

@ -34,8 +34,8 @@
#define NUMBER_OF_MAJORS 256 #define NUMBER_OF_MAJORS 256
typedef struct { typedef struct {
char *name; const char *name;
int max_partitions; const int max_partitions;
} device_info_t; } device_info_t;
static int _md_major = -1; static int _md_major = -1;
@ -46,7 +46,7 @@ int md_major(void)
} }
/* This list can be supplemented with devices/types in the config file */ /* This list can be supplemented with devices/types in the config file */
static device_info_t device_info[] = { static const device_info_t device_info[] = {
{"ide", 16}, /* IDE disk */ {"ide", 16}, /* IDE disk */
{"sd", 16}, /* SCSI disk */ {"sd", 16}, /* SCSI disk */
{"md", 16}, /* Multiple Disk driver (SoftRAID) */ {"md", 16}, /* Multiple Disk driver (SoftRAID) */
@ -90,7 +90,7 @@ static int *_scan_proc_dev(const char *proc, struct config_node *cn)
int i, j = 0; int i, j = 0;
int line_maj = 0; int line_maj = 0;
int blocksection = 0; int blocksection = 0;
int dev_len = 0; size_t dev_len = 0;
struct config_value *cv; struct config_value *cv;
int *max_partitions_by_major; int *max_partitions_by_major;
char *name; char *name;

View File

@ -94,7 +94,7 @@ static void _xlate_vgd(struct vg_disk *disk)
xx32(pvg_total); xx32(pvg_total);
} }
static void _xlate_extents(struct pe_disk *extents, int count) static void _xlate_extents(struct pe_disk *extents, uint32_t count)
{ {
int i; int i;
@ -132,7 +132,7 @@ static int _munge_formats(struct pv_disk *pvd)
static int _read_pvd(struct device *dev, struct pv_disk *pvd) static int _read_pvd(struct device *dev, struct pv_disk *pvd)
{ {
if (dev_read(dev, 0, sizeof(*pvd), pvd) != sizeof(*pvd)) { if (dev_read(dev, __UINT64_C(0), sizeof(*pvd), pvd) != sizeof(*pvd)) {
log_very_verbose("Failed to read PV data from %s", log_very_verbose("Failed to read PV data from %s",
dev_name(dev)); dev_name(dev));
return 0; return 0;
@ -155,7 +155,7 @@ static int _read_pvd(struct device *dev, struct pv_disk *pvd)
return 1; return 1;
} }
static int _read_lvd(struct device *dev, ulong pos, struct lv_disk *disk) static int _read_lvd(struct device *dev, uint64_t pos, struct lv_disk *disk)
{ {
if (dev_read(dev, pos, sizeof(*disk), disk) != sizeof(*disk)) if (dev_read(dev, pos, sizeof(*disk), disk) != sizeof(*disk))
fail; fail;
@ -168,7 +168,7 @@ static int _read_lvd(struct device *dev, ulong pos, struct lv_disk *disk)
static int _read_vgd(struct disk_list *data) static int _read_vgd(struct disk_list *data)
{ {
struct vg_disk *vgd = &data->vgd; struct vg_disk *vgd = &data->vgd;
ulong pos = data->pvd.vg_on_disk.base; uint64_t pos = data->pvd.vg_on_disk.base;
if (dev_read(data->dev, pos, sizeof(*vgd), vgd) != sizeof(*vgd)) if (dev_read(data->dev, pos, sizeof(*vgd), vgd) != sizeof(*vgd))
fail; fail;
@ -182,8 +182,8 @@ static int _read_uuids(struct disk_list *data)
int num_read = 0; int num_read = 0;
struct uuid_list *ul; struct uuid_list *ul;
char buffer[NAME_LEN]; char buffer[NAME_LEN];
ulong pos = data->pvd.pv_uuidlist_on_disk.base; uint64_t pos = data->pvd.pv_uuidlist_on_disk.base;
ulong end = pos + data->pvd.pv_uuidlist_on_disk.size; uint64_t end = pos + data->pvd.pv_uuidlist_on_disk.size;
while (pos < end && num_read < data->vgd.pv_cur) { while (pos < end && num_read < data->vgd.pv_cur) {
if (dev_read(data->dev, pos, sizeof(buffer), buffer) != if (dev_read(data->dev, pos, sizeof(buffer), buffer) !=
@ -212,8 +212,8 @@ static inline int _check_lvd(struct lv_disk *lvd)
static int _read_lvs(struct disk_list *data) static int _read_lvs(struct disk_list *data)
{ {
int i, read = 0; unsigned int i, read = 0;
ulong pos; uint64_t pos;
struct lvd_list *ll; struct lvd_list *ll;
struct vg_disk *vgd = &data->vgd; struct vg_disk *vgd = &data->vgd;
@ -241,7 +241,7 @@ static int _read_extents(struct disk_list *data)
{ {
size_t len = sizeof(struct pe_disk) * data->pvd.pe_total; size_t len = sizeof(struct pe_disk) * data->pvd.pe_total;
struct pe_disk *extents = pool_alloc(data->mem, len); struct pe_disk *extents = pool_alloc(data->mem, len);
ulong pos = data->pvd.pe_on_disk.base; uint64_t pos = data->pvd.pe_on_disk.base;
if (!extents) if (!extents)
fail; fail;
@ -260,7 +260,8 @@ static int _read_extents(struct disk_list *data)
*/ */
static void _munge_exported_vg(struct disk_list *data) static void _munge_exported_vg(struct disk_list *data)
{ {
int l, s; int l;
size_t s;
/* Return if PV not in a VG or VG not exported */ /* Return if PV not in a VG or VG not exported */
if ((!*data->pvd.vg_name) || !(data->vgd.vg_status & VG_EXPORTED)) if ((!*data->pvd.vg_name) || !(data->vgd.vg_status & VG_EXPORTED))
@ -274,7 +275,7 @@ static void _munge_exported_vg(struct disk_list *data)
data->pvd.pv_status |= VG_EXPORTED; data->pvd.pv_status |= VG_EXPORTED;
} }
static struct disk_list *__read_disk(struct format_type *fmt, static struct disk_list *__read_disk(const struct format_type *fmt,
struct device *dev, struct pool *mem, struct device *dev, struct pool *mem,
const char *vg_name) const char *vg_name)
{ {
@ -361,7 +362,7 @@ static struct disk_list *__read_disk(struct format_type *fmt,
return NULL; return NULL;
} }
struct disk_list *read_disk(struct format_type *fmt, struct device *dev, struct disk_list *read_disk(const struct format_type *fmt, struct device *dev,
struct pool *mem, const char *vg_name) struct pool *mem, const char *vg_name)
{ {
struct disk_list *r; struct disk_list *r;
@ -408,7 +409,7 @@ static void _add_pv_to_list(struct list *head, struct disk_list *data)
* We keep track of the first object allocated form the pool * We keep track of the first object allocated form the pool
* so we can free off all the memory if something goes wrong. * so we can free off all the memory if something goes wrong.
*/ */
int read_pvs_in_vg(struct format_type *fmt, const char *vg_name, int read_pvs_in_vg(const struct format_type *fmt, const char *vg_name,
struct dev_filter *filter, struct pool *mem, struct dev_filter *filter, struct pool *mem,
struct list *head) struct list *head)
{ {
@ -461,7 +462,7 @@ int read_pvs_in_vg(struct format_type *fmt, const char *vg_name,
static int _write_vgd(struct disk_list *data) static int _write_vgd(struct disk_list *data)
{ {
struct vg_disk *vgd = &data->vgd; struct vg_disk *vgd = &data->vgd;
ulong pos = data->pvd.vg_on_disk.base; uint64_t pos = data->pvd.vg_on_disk.base;
_xlate_vgd(vgd); _xlate_vgd(vgd);
if (dev_write(data->dev, pos, sizeof(*vgd), vgd) != sizeof(*vgd)) if (dev_write(data->dev, pos, sizeof(*vgd), vgd) != sizeof(*vgd))
@ -476,8 +477,8 @@ static int _write_uuids(struct disk_list *data)
{ {
struct uuid_list *ul; struct uuid_list *ul;
struct list *uh; struct list *uh;
ulong pos = data->pvd.pv_uuidlist_on_disk.base; uint64_t pos = data->pvd.pv_uuidlist_on_disk.base;
ulong end = pos + data->pvd.pv_uuidlist_on_disk.size; uint64_t end = pos + data->pvd.pv_uuidlist_on_disk.size;
list_iterate(uh, &data->uuids) { list_iterate(uh, &data->uuids) {
if (pos >= end) { if (pos >= end) {
@ -496,7 +497,7 @@ static int _write_uuids(struct disk_list *data)
return 1; return 1;
} }
static int _write_lvd(struct device *dev, ulong pos, struct lv_disk *disk) static int _write_lvd(struct device *dev, uint64_t pos, struct lv_disk *disk)
{ {
_xlate_lvd(disk); _xlate_lvd(disk);
if (dev_write(dev, pos, sizeof(*disk), disk) != sizeof(*disk)) if (dev_write(dev, pos, sizeof(*disk), disk) != sizeof(*disk))
@ -510,7 +511,7 @@ static int _write_lvd(struct device *dev, ulong pos, struct lv_disk *disk)
static int _write_lvs(struct disk_list *data) static int _write_lvs(struct disk_list *data)
{ {
struct list *lvh; struct list *lvh;
ulong pos, offset; uint64_t pos, offset;
pos = data->pvd.lv_on_disk.base; pos = data->pvd.lv_on_disk.base;
@ -540,7 +541,7 @@ static int _write_extents(struct disk_list *data)
{ {
size_t len = sizeof(struct pe_disk) * data->pvd.pe_total; size_t len = sizeof(struct pe_disk) * data->pvd.pe_total;
struct pe_disk *extents = data->extents; struct pe_disk *extents = data->extents;
ulong pos = data->pvd.pe_on_disk.base; uint64_t pos = data->pvd.pe_on_disk.base;
_xlate_extents(extents, data->pvd.pe_total); _xlate_extents(extents, data->pvd.pe_total);
if (dev_write(data->dev, pos, len, extents) != len) if (dev_write(data->dev, pos, len, extents) != len)
@ -554,8 +555,8 @@ static int _write_extents(struct disk_list *data)
static int _write_pvd(struct disk_list *data) static int _write_pvd(struct disk_list *data)
{ {
char *buf; char *buf;
ulong pos = data->pvd.pv_on_disk.base; uint64_t pos = data->pvd.pv_on_disk.base;
ulong size = data->pvd.pv_on_disk.size; size_t size = data->pvd.pv_on_disk.size;
if (size < sizeof(struct pv_disk)) { if (size < sizeof(struct pv_disk)) {
log_error("Invalid PV structure size."); log_error("Invalid PV structure size.");
@ -587,7 +588,8 @@ static int _write_pvd(struct disk_list *data)
/* /*
* assumes the device has been opened. * assumes the device has been opened.
*/ */
static int __write_all_pvd(struct format_type *fmt, struct disk_list *data) static int __write_all_pvd(const struct format_type *fmt,
struct disk_list *data)
{ {
const char *pv_name = dev_name(data->dev); const char *pv_name = dev_name(data->dev);
@ -636,7 +638,7 @@ static int __write_all_pvd(struct format_type *fmt, struct disk_list *data)
/* /*
* opens the device and hands to the above fn. * opens the device and hands to the above fn.
*/ */
static int _write_all_pvd(struct format_type *fmt, struct disk_list *data) static int _write_all_pvd(const struct format_type *fmt, struct disk_list *data)
{ {
int r; int r;
@ -658,7 +660,7 @@ static int _write_all_pvd(struct format_type *fmt, struct disk_list *data)
* little sanity checking, so make sure correct * little sanity checking, so make sure correct
* data is passed to here. * data is passed to here.
*/ */
int write_disks(struct format_type *fmt, struct list *pvs) int write_disks(const struct format_type *fmt, struct list *pvs)
{ {
struct list *pvh; struct list *pvh;
struct disk_list *dl; struct disk_list *dl;

View File

@ -178,14 +178,14 @@ int calculate_extent_count(struct physical_volume *pv, uint32_t extent_size,
* disk_lists. * disk_lists.
*/ */
struct disk_list *read_disk(struct format_type *fmt, struct device *dev, struct disk_list *read_disk(const struct format_type *fmt, struct device *dev,
struct pool *mem, const char *vg_name); struct pool *mem, const char *vg_name);
int read_pvs_in_vg(struct format_type *fmt, const char *vg_name, int read_pvs_in_vg(const struct format_type *fmt, const char *vg_name,
struct dev_filter *filter, struct dev_filter *filter,
struct pool *mem, struct list *results); struct pool *mem, struct list *results);
int write_disks(struct format_type *fmt, struct list *pvds); int write_disks(const struct format_type *fmt, struct list *pvds);
/* /*
* Functions to translate to between disk and in * Functions to translate to between disk and in
@ -205,10 +205,10 @@ int import_lv(struct pool *mem, struct logical_volume *lv, struct lv_disk *lvd);
int import_extents(struct pool *mem, struct volume_group *vg, int import_extents(struct pool *mem, struct volume_group *vg,
struct list *pvds); struct list *pvds);
int export_extents(struct disk_list *dl, int lv_num, int export_extents(struct disk_list *dl, uint32_t lv_num,
struct logical_volume *lv, struct physical_volume *pv); struct logical_volume *lv, struct physical_volume *pv);
int import_pvs(struct format_type *fmt, struct pool *mem, int import_pvs(const struct format_type *fmt, struct pool *mem,
struct volume_group *vg, struct volume_group *vg,
struct list *pvds, struct list *results, int *count); struct list *pvds, struct list *results, int *count);

View File

@ -23,8 +23,9 @@ static int _check_vgs(struct list *pvs, int *partial)
struct disk_list *dl = NULL; struct disk_list *dl = NULL;
struct disk_list *first = NULL; struct disk_list *first = NULL;
int pv_count = 0; uint32_t pv_count = 0;
int exported = -1; uint32_t exported = 0;
int first_time = 1;
*partial = 0; *partial = 0;
@ -36,8 +37,9 @@ static int _check_vgs(struct list *pvs, int *partial)
list_iterate(pvh, pvs) { list_iterate(pvh, pvs) {
dl = list_item(pvh, struct disk_list); dl = list_item(pvh, struct disk_list);
if (exported < 0) { if (first_time) {
exported = dl->pvd.pv_status & VG_EXPORTED; exported = dl->pvd.pv_status & VG_EXPORTED;
first_time = 0;
continue; continue;
} }
@ -251,7 +253,7 @@ static int _vg_write(struct format_instance *fid, struct volume_group *vg,
return r; return r;
} }
int _pv_read(struct format_type *fmt, const char *pv_name, static int _pv_read(const struct format_type *fmt, const char *pv_name,
struct physical_volume *pv, struct list *mdas) struct physical_volume *pv, struct list *mdas)
{ {
struct pool *mem = pool_create(1024); struct pool *mem = pool_create(1024);
@ -290,7 +292,7 @@ int _pv_read(struct format_type *fmt, const char *pv_name,
return r; return r;
} }
static int _pv_setup(struct format_type *fmt, static int _pv_setup(const struct format_type *fmt,
uint64_t pe_start, uint32_t extent_count, uint64_t pe_start, uint32_t extent_count,
uint32_t extent_size, uint32_t extent_size,
int pvmetadatacopies, int pvmetadatacopies,
@ -301,7 +303,8 @@ static int _pv_setup(struct format_type *fmt,
pv->size--; pv->size--;
if (pv->size > MAX_PV_SIZE) { if (pv->size > MAX_PV_SIZE) {
log_error("Physical volumes cannot be bigger than %s", log_error("Physical volumes cannot be bigger than %s",
display_size(fmt->cmd, MAX_PV_SIZE / 2, SIZE_SHORT)); display_size(fmt->cmd, (uint64_t) MAX_PV_SIZE / 2,
SIZE_SHORT));
return 0; return 0;
} }
@ -329,10 +332,10 @@ static int _pv_setup(struct format_type *fmt,
return 1; return 1;
} }
static int _find_free_lvnum(struct logical_volume *lv) static uint32_t _find_free_lvnum(struct logical_volume *lv)
{ {
int lvnum_used[MAX_LV]; int lvnum_used[MAX_LV];
int i = 0; uint32_t i = 0;
struct list *lvh; struct list *lvh;
struct lv_list *lvl; struct lv_list *lvl;
@ -371,7 +374,7 @@ static int _lv_setup(struct format_instance *fid, struct logical_volume *lv)
return 1; return 1;
} }
static int _pv_write(struct format_type *fmt, struct physical_volume *pv, static int _pv_write(const struct format_type *fmt, struct physical_volume *pv,
struct list *mdas, int64_t sector) struct list *mdas, int64_t sector)
{ {
struct pool *mem; struct pool *mem;
@ -434,7 +437,7 @@ static int _pv_write(struct format_type *fmt, struct physical_volume *pv,
return 0; return 0;
} }
int _vg_setup(struct format_instance *fid, struct volume_group *vg) static int _vg_setup(struct format_instance *fid, struct volume_group *vg)
{ {
/* just check max_pv and max_lv */ /* just check max_pv and max_lv */
if (vg->max_lv >= MAX_LV) if (vg->max_lv >= MAX_LV)
@ -445,10 +448,12 @@ int _vg_setup(struct format_instance *fid, struct volume_group *vg)
if (vg->extent_size > MAX_PE_SIZE || vg->extent_size < MIN_PE_SIZE) { if (vg->extent_size > MAX_PE_SIZE || vg->extent_size < MIN_PE_SIZE) {
log_error("Extent size must be between %s and %s", log_error("Extent size must be between %s and %s",
display_size(fid->fmt->cmd, MIN_PE_SIZE / 2, display_size(fid->fmt->cmd, (uint64_t) MIN_PE_SIZE
/ 2,
SIZE_SHORT), display_size(fid->fmt->cmd, SIZE_SHORT), display_size(fid->fmt->cmd,
MAX_PE_SIZE / (uint64_t)
2, MAX_PE_SIZE
/ 2,
SIZE_SHORT)); SIZE_SHORT));
return 0; return 0;
@ -456,8 +461,8 @@ int _vg_setup(struct format_instance *fid, struct volume_group *vg)
if (vg->extent_size % MIN_PE_SIZE) { if (vg->extent_size % MIN_PE_SIZE) {
log_error("Extent size must be multiple of %s", log_error("Extent size must be multiple of %s",
display_size(fid->fmt->cmd, MIN_PE_SIZE / 2, display_size(fid->fmt->cmd,
SIZE_SHORT)); (uint64_t) MIN_PE_SIZE / 2, SIZE_SHORT));
return 0; return 0;
} }
@ -475,8 +480,9 @@ static struct metadata_area_ops _metadata_format1_ops = {
vg_write:_vg_write, vg_write:_vg_write,
}; };
struct format_instance *_create_instance(struct format_type *fmt, static struct format_instance *_create_instance(const struct format_type *fmt,
const char *vgname, void *private) const char *vgname,
void *private)
{ {
struct format_instance *fid; struct format_instance *fid;
struct metadata_area *mda; struct metadata_area *mda;
@ -503,14 +509,14 @@ struct format_instance *_create_instance(struct format_type *fmt,
return fid; return fid;
} }
void _destroy_instance(struct format_instance *fid) static void _destroy_instance(struct format_instance *fid)
{ {
return; return;
} }
void _destroy(struct format_type *fmt) static void _destroy(const struct format_type *fmt)
{ {
dbg_free(fmt); dbg_free((void *) fmt);
} }
static struct format_handler _format1_ops = { static struct format_handler _format1_ops = {

View File

@ -79,7 +79,7 @@ int import_pv(struct pool *mem, struct device *dev,
return 1; return 1;
} }
int _system_id(char *s, const char *prefix) static int _system_id(char *s, const char *prefix)
{ {
struct utsname uts; struct utsname uts;
@ -353,7 +353,7 @@ static void _export_lv(struct lv_disk *lvd, struct volume_group *vg,
lvd->lv_allocation |= LV_CONTIGUOUS; lvd->lv_allocation |= LV_CONTIGUOUS;
} }
int export_extents(struct disk_list *dl, int lv_num, int export_extents(struct disk_list *dl, uint32_t lv_num,
struct logical_volume *lv, struct physical_volume *pv) struct logical_volume *lv, struct physical_volume *pv)
{ {
struct list *segh; struct list *segh;
@ -380,7 +380,7 @@ int export_extents(struct disk_list *dl, int lv_num,
return 1; return 1;
} }
int import_pvs(struct format_type *fmt, struct pool *mem, int import_pvs(const struct format_type *fmt, struct pool *mem,
struct volume_group *vg, struct volume_group *vg,
struct list *pvds, struct list *results, int *count) struct list *pvds, struct list *results, int *count)
{ {
@ -470,7 +470,8 @@ int export_lvs(struct disk_list *dl, struct volume_group *vg,
struct list *lvh, *sh; struct list *lvh, *sh;
struct lv_list *ll; struct lv_list *ll;
struct lvd_list *lvdl; struct lvd_list *lvdl;
int lv_num, len; size_t len;
uint32_t lv_num;
struct hash_table *lvd_hash; struct hash_table *lvd_hash;
if (!_check_vg_name(vg->name)) { if (!_check_vg_name(vg->name)) {

View File

@ -62,7 +62,7 @@ static void _calc_simple_layout(struct pv_disk *pvd)
pvd->pe_on_disk.size = pvd->pe_total * sizeof(struct pe_disk); pvd->pe_on_disk.size = pvd->pe_total * sizeof(struct pe_disk);
} }
int _check_vg_limits(struct disk_list *dl) static int _check_vg_limits(struct disk_list *dl)
{ {
if (dl->vgd.lv_max > MAX_LV) { if (dl->vgd.lv_max > MAX_LV) {
log_error("MaxLogicalVolumes of %d exceeds format limit of %d " log_error("MaxLogicalVolumes of %d exceeds format limit of %d "

View File

@ -100,7 +100,7 @@ struct labeller *lvm1_labeller_create(struct format_type *fmt)
} }
l->ops = &_lvm1_ops; l->ops = &_lvm1_ops;
l->private = (void *) fmt; l->private = (const void *) fmt;
return l; return l;
} }

View File

@ -51,23 +51,23 @@ struct archive_file {
* Extract vg name and version number from a filename. * Extract vg name and version number from a filename.
*/ */
static int _split_vg(const char *filename, char *vg, size_t vg_size, static int _split_vg(const char *filename, char *vg, size_t vg_size,
uint32_t *index) uint32_t *ix)
{ {
int len, vg_len; size_t len, vg_len;
char *dot, *underscore; const char *dot, *underscore;
len = strlen(filename); len = strlen(filename);
if (len < 7) if (len < 7)
return 0; return 0;
dot = (char *) (filename + len - 3); dot = (filename + len - 3);
if (strcmp(".vg", dot)) if (strcmp(".vg", dot))
return 0; return 0;
if (!(underscore = rindex(filename, '_'))) if (!(underscore = rindex(filename, '_')))
return 0; return 0;
if (sscanf(underscore + 1, "%u", index) != 1) if (sscanf(underscore + 1, "%u", ix) != 1)
return 0; return 0;
vg_len = underscore - filename; vg_len = underscore - filename;
@ -83,7 +83,7 @@ static int _split_vg(const char *filename, char *vg, size_t vg_size,
static void _insert_file(struct list *head, struct archive_file *b) static void _insert_file(struct list *head, struct archive_file *b)
{ {
struct list *bh; struct list *bh;
struct archive_file *bf; struct archive_file *bf = NULL;
if (list_empty(head)) { if (list_empty(head)) {
list_add(head, &b->list); list_add(head, &b->list);
@ -123,7 +123,7 @@ static char *_join(struct pool *mem, const char *dir, const char *name)
static struct list *_scan_archive(struct pool *mem, static struct list *_scan_archive(struct pool *mem,
const char *vg, const char *dir) const char *vg, const char *dir)
{ {
int i, count, index; int i, count, ix;
char vg_name[64], *path; char vg_name[64], *path;
struct dirent **dirent; struct dirent **dirent;
struct archive_file *af; struct archive_file *af;
@ -149,7 +149,7 @@ static struct list *_scan_archive(struct pool *mem,
/* check the name is the correct format */ /* check the name is the correct format */
if (!_split_vg(dirent[i]->d_name, vg_name, sizeof(vg_name), if (!_split_vg(dirent[i]->d_name, vg_name, sizeof(vg_name),
&index)) &ix))
continue; continue;
/* is it the vg we're interested in ? */ /* is it the vg we're interested in ? */
@ -170,7 +170,7 @@ static struct list *_scan_archive(struct pool *mem,
goto out; goto out;
} }
af->index = index; af->index = ix;
af->path = path; af->path = path;
/* /*
@ -231,7 +231,7 @@ int archive_vg(struct volume_group *vg,
uint32_t retain_days, uint32_t min_archive) uint32_t retain_days, uint32_t min_archive)
{ {
int i, fd, renamed = 0; int i, fd, renamed = 0;
unsigned int index = 0; unsigned int ix = 0;
struct archive_file *last; struct archive_file *last;
FILE *fp = NULL; FILE *fp = NULL;
char temp_file[PATH_MAX], archive_name[PATH_MAX]; char temp_file[PATH_MAX], archive_name[PATH_MAX];
@ -268,15 +268,15 @@ int archive_vg(struct volume_group *vg,
} }
if (list_empty(archives)) if (list_empty(archives))
index = 0; ix = 0;
else { else {
last = list_item(archives->p, struct archive_file); last = list_item(archives->p, struct archive_file);
index = last->index + 1; ix = last->index + 1;
} }
for (i = 0; i < 10; i++) { for (i = 0; i < 10; i++) {
if (lvm_snprintf(archive_name, sizeof(archive_name), if (lvm_snprintf(archive_name, sizeof(archive_name),
"%s/%s_%05d.vg", dir, vg->name, index) < 0) { "%s/%s_%05d.vg", dir, vg->name, ix) < 0) {
log_error("Archive file name too long."); log_error("Archive file name too long.");
return 0; return 0;
} }
@ -284,7 +284,7 @@ int archive_vg(struct volume_group *vg,
if ((renamed = lvm_rename(temp_file, archive_name))) if ((renamed = lvm_rename(temp_file, archive_name)))
break; break;
index++; ix++;
} }
if (!renamed) if (!renamed)

View File

@ -173,7 +173,7 @@ static int _out_with_comment_raw(struct formatter *f, const char *comment,
*/ */
static int _sectors_to_units(uint64_t sectors, char *buffer, size_t s) static int _sectors_to_units(uint64_t sectors, char *buffer, size_t s)
{ {
static char *_units[] = { static const char *_units[] = {
"Kilobytes", "Kilobytes",
"Megabytes", "Megabytes",
"Gigabytes", "Gigabytes",
@ -288,7 +288,8 @@ static int _print_vg(struct formatter *f, struct volume_group *vg)
_outf(f, "status = %s", buffer); _outf(f, "status = %s", buffer);
if (vg->system_id && *vg->system_id) if (vg->system_id && *vg->system_id)
_outf(f, "system_id = \"%s\"", vg->system_id); _outf(f, "system_id = \"%s\"", vg->system_id);
if (!_out_size(f, vg->extent_size, "extent_size = %u", vg->extent_size)) { if (!_out_size(f, (uint64_t) vg->extent_size, "extent_size = %u",
vg->extent_size)) {
stack; stack;
return 0; return 0;
} }
@ -369,15 +370,15 @@ static int _print_pvs(struct formatter *f, struct volume_group *vg)
static int _print_segment(struct formatter *f, struct volume_group *vg, static int _print_segment(struct formatter *f, struct volume_group *vg,
int count, struct lv_segment *seg) int count, struct lv_segment *seg)
{ {
int s; unsigned int s;
const char *name; const char *name;
_outf(f, "segment%u {", count); _outf(f, "segment%u {", count);
_inc_indent(f); _inc_indent(f);
_outf(f, "start_extent = %u", seg->le); _outf(f, "start_extent = %u", seg->le);
if (!_out_size(f, seg->len * vg->extent_size, "extent_count = %u", if (!_out_size(f, (uint64_t) seg->len * vg->extent_size,
seg->len)) { "extent_count = %u", seg->len)) {
stack; stack;
return 0; return 0;
} }
@ -391,7 +392,7 @@ static int _print_segment(struct formatter *f, struct volume_group *vg,
(seg->stripes == 1) ? "\t# linear" : ""); (seg->stripes == 1) ? "\t# linear" : "");
if (seg->stripes > 1) if (seg->stripes > 1)
_out_size(f, seg->stripe_size, _out_size(f, (uint64_t) seg->stripe_size,
"stripe_size = %u", seg->stripe_size); "stripe_size = %u", seg->stripe_size);
f->nl(f); f->nl(f);

View File

@ -14,8 +14,8 @@
* converted into arrays of strings. * converted into arrays of strings.
*/ */
struct flag { struct flag {
int mask; const int mask;
char *description; const char *description;
}; };
static struct flag _vg_flags[] = { static struct flag _vg_flags[] = {
@ -62,7 +62,7 @@ static struct flag *_get_flags(int type)
static int _emit(char **buffer, size_t *size, const char *fmt, ...) static int _emit(char **buffer, size_t *size, const char *fmt, ...)
{ {
size_t n; int n;
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);

View File

@ -27,8 +27,8 @@
#include <dirent.h> #include <dirent.h>
#include <ctype.h> #include <ctype.h>
static struct format_instance *_create_text_instance(struct format_type *fmt, static struct format_instance *_create_text_instance(const struct format_type
const char *vgname, *fmt, const char *vgname,
void *context); void *context);
struct dir_list { struct dir_list {
@ -48,9 +48,7 @@ struct text_context {
}; };
/* /*
* NOTE: Currently there can be only one vg per text file, and locking * NOTE: Currently there can be only one vg per text file.
* assumes VG's metadata is only held in metadata areas on PVs
* inside the VG.
*/ */
static int _vg_setup(struct format_instance *fid, struct volume_group *vg) static int _vg_setup(struct format_instance *fid, struct volume_group *vg)
@ -99,7 +97,7 @@ static void _xlate_mdah(struct mda_header *mdah)
} }
} }
static struct mda_header *_raw_read_mda_header(struct format_type *fmt, static struct mda_header *_raw_read_mda_header(const struct format_type *fmt,
struct device_area *dev_area) struct device_area *dev_area)
{ {
struct mda_header *mdah; struct mda_header *mdah;
@ -145,7 +143,7 @@ static struct mda_header *_raw_read_mda_header(struct format_type *fmt,
return mdah; return mdah;
} }
static int _raw_write_mda_header(struct format_type *fmt, static int _raw_write_mda_header(const struct format_type *fmt,
struct device *dev, struct device *dev,
uint64_t start_byte, struct mda_header *mdah) uint64_t start_byte, struct mda_header *mdah)
{ {
@ -172,7 +170,7 @@ static struct raw_locn *_find_vg_rlocn(struct device_area *dev_area,
struct mda_header *mdah, struct mda_header *mdah,
const char *vgname) const char *vgname)
{ {
int len; size_t len;
char vgnamebuf[NAME_LEN + 2]; char vgnamebuf[NAME_LEN + 2];
struct raw_locn *rlocn; struct raw_locn *rlocn;
@ -239,7 +237,7 @@ static struct volume_group *_vg_read_raw_area(struct format_instance *fid,
struct mda_header *mdah; struct mda_header *mdah;
time_t when; time_t when;
char *desc; char *desc;
uint64_t wrap = 0; uint32_t wrap = 0;
if (!dev_open(area->dev, O_RDONLY)) { if (!dev_open(area->dev, O_RDONLY)) {
stack; stack;
@ -257,7 +255,7 @@ static struct volume_group *_vg_read_raw_area(struct format_instance *fid,
} }
if (rlocn->offset + rlocn->size > mdah->size) if (rlocn->offset + rlocn->size > mdah->size)
wrap = (rlocn->offset + rlocn->size) - mdah->size; wrap = (uint32_t) ((rlocn->offset + rlocn->size) - mdah->size);
if (wrap > rlocn->offset) { if (wrap > rlocn->offset) {
log_error("VG %s metadata too large for circular buffer", log_error("VG %s metadata too large for circular buffer",
@ -265,12 +263,13 @@ static struct volume_group *_vg_read_raw_area(struct format_instance *fid,
goto out; goto out;
} }
/* FIXME 64-bit */
if (!(vg = text_vg_import_fd(fid, dev_name(area->dev), if (!(vg = text_vg_import_fd(fid, dev_name(area->dev),
dev_fd(area->dev), dev_fd(area->dev),
area->start + rlocn->offset, (off_t) (area->start + rlocn->offset),
rlocn->size - wrap, (uint32_t) (rlocn->size - wrap),
area->start + MDA_HEADER_SIZE, wrap, (off_t) (area->start + MDA_HEADER_SIZE),
calc_crc, rlocn->checksum, &when, wrap, calc_crc, rlocn->checksum, &when,
&desc))) { &desc))) {
stack; stack;
goto out; goto out;
@ -301,7 +300,7 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
struct physical_volume *pv; struct physical_volume *pv;
struct list *pvh; struct list *pvh;
int r = 0; int r = 0;
uint64_t new_wrap = 0, old_wrap = 0; uint32_t new_wrap = 0, old_wrap = 0;
/* FIXME Essential fix! Make dynamic (realloc? pool?) */ /* FIXME Essential fix! Make dynamic (realloc? pool?) */
char buf[65536]; char buf[65536];
@ -369,20 +368,21 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
/* Write text out, circularly */ /* Write text out, circularly */
if (dev_write(mdac->area.dev, mdac->area.start + mdac->rlocn.offset, if (dev_write(mdac->area.dev, mdac->area.start + mdac->rlocn.offset,
mdac->rlocn.size - new_wrap, (size_t) (mdac->rlocn.size - new_wrap),
buf) != mdac->rlocn.size - new_wrap) { buf) != mdac->rlocn.size - new_wrap) {
stack; stack;
goto out; goto out;
} }
if (new_wrap) { if (new_wrap) {
log_debug("Writing metadata to %s at %" PRIu64 " len %" PRIu64, log_debug("Writing metadata to %s at %" PRIu64 " len %" PRIu32,
dev_name(mdac->area.dev), mdac->area.start + dev_name(mdac->area.dev), mdac->area.start +
MDA_HEADER_SIZE, new_wrap); MDA_HEADER_SIZE, new_wrap);
if (dev_write(mdac->area.dev, if (dev_write(mdac->area.dev,
mdac->area.start + MDA_HEADER_SIZE, mdac->area.start + MDA_HEADER_SIZE,
new_wrap, buf + mdac->rlocn.size - new_wrap) (size_t) new_wrap,
buf + mdac->rlocn.size - new_wrap)
!= new_wrap) { != new_wrap) {
stack; stack;
goto out; goto out;
@ -390,7 +390,8 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
} }
mdac->rlocn.checksum = calc_crc(INITIAL_CRC, buf, mdac->rlocn.checksum = calc_crc(INITIAL_CRC, buf,
mdac->rlocn.size - new_wrap); (uint32_t) (mdac->rlocn.size -
new_wrap));
if (new_wrap) if (new_wrap)
mdac->rlocn.checksum = calc_crc(mdac->rlocn.checksum, mdac->rlocn.checksum = calc_crc(mdac->rlocn.checksum,
buf + mdac->rlocn.size - buf + mdac->rlocn.size -
@ -560,7 +561,8 @@ static int _vg_write_file(struct format_instance *fid, struct volume_group *vg,
if (slash == 0) if (slash == 0)
strcpy(temp_dir, "."); strcpy(temp_dir, ".");
else if (slash - tc->path_edit < PATH_MAX) { else if (slash - tc->path_edit < PATH_MAX) {
strncpy(temp_dir, tc->path_edit, slash - tc->path_edit); strncpy(temp_dir, tc->path_edit,
(size_t) (slash - tc->path_edit));
temp_dir[slash - tc->path_edit] = '\0'; temp_dir[slash - tc->path_edit] = '\0';
} else { } else {
@ -643,7 +645,7 @@ static int _vg_commit_file(struct format_instance *fid, struct volume_group *vg,
struct text_context *tc = (struct text_context *) mda->metadata_locn; struct text_context *tc = (struct text_context *) mda->metadata_locn;
char *slash; char *slash;
char newname[PATH_MAX]; char newname[PATH_MAX];
int len; size_t len;
if (!_vg_commit_file_backup(fid, vg, mda)) if (!_vg_commit_file_backup(fid, vg, mda))
return 0; return 0;
@ -695,7 +697,7 @@ static int _vg_remove_file(struct format_instance *fid, struct volume_group *vg,
return 1; return 1;
} }
static int _scan_file(struct format_type *fmt) static int _scan_file(const struct format_type *fmt)
{ {
struct dirent *dirent; struct dirent *dirent;
struct dir_list *dl; struct dir_list *dl;
@ -743,13 +745,13 @@ static int _scan_file(struct format_type *fmt)
return 1; return 1;
} }
int vgname_from_mda(struct format_type *fmt, struct device_area *dev_area, int vgname_from_mda(const struct format_type *fmt, struct device_area *dev_area,
char *buf, uint32_t size) char *buf, uint32_t size)
{ {
struct raw_locn *rlocn; struct raw_locn *rlocn;
struct mda_header *mdah; struct mda_header *mdah;
int already_open; int already_open;
int len; unsigned int len;
int r = 0; int r = 0;
already_open = dev_is_open(dev_area->dev); already_open = dev_is_open(dev_area->dev);
@ -768,13 +770,13 @@ int vgname_from_mda(struct format_type *fmt, struct device_area *dev_area,
while (rlocn->offset) { while (rlocn->offset) {
if (dev_read(dev_area->dev, dev_area->start + rlocn->offset, if (dev_read(dev_area->dev, dev_area->start + rlocn->offset,
size, buf) != size) { size, buf) != (signed) size) {
stack; stack;
goto out; goto out;
} }
len = 0; len = 0;
while (buf[len] && !isspace(buf[len]) && buf[len] != '{' && while (buf[len] && !isspace(buf[len]) && buf[len] != '{' &&
len < size - 1) len < (size - 1))
len++; len++;
buf[len] = '\0'; buf[len] = '\0';
@ -798,7 +800,7 @@ int vgname_from_mda(struct format_type *fmt, struct device_area *dev_area,
return r; return r;
} }
static int _scan_raw(struct format_type *fmt) static int _scan_raw(const struct format_type *fmt)
{ {
struct raw_list *rl; struct raw_list *rl;
struct list *rlh, *raw_list; struct list *rlh, *raw_list;
@ -826,14 +828,14 @@ static int _scan_raw(struct format_type *fmt)
return 1; return 1;
} }
static int _scan(struct format_type *fmt) static int _scan(const struct format_type *fmt)
{ {
return (_scan_file(fmt) & _scan_raw(fmt)); return (_scan_file(fmt) & _scan_raw(fmt));
} }
/* For orphan, creates new mdas according to policy. /* For orphan, creates new mdas according to policy.
Always have an mda between end-of-label and PE_ALIGN boundary */ Always have an mda between end-of-label and PE_ALIGN boundary */
static int _mda_setup(struct format_type *fmt, static int _mda_setup(const struct format_type *fmt,
uint64_t pe_start, uint64_t pe_end, uint64_t pe_start, uint64_t pe_end,
int pvmetadatacopies, int pvmetadatacopies,
uint64_t pvmetadatasize, struct list *mdas, uint64_t pvmetadatasize, struct list *mdas,
@ -889,8 +891,9 @@ static int _mda_setup(struct format_type *fmt,
mda_size1)) mda_size1))
return 0; return 0;
if (!dev_zero(pv->dev, start1, if (!dev_zero((struct device *) pv->dev, start1,
mda_size1 > wipe_size ? wipe_size : mda_size1)) { (size_t) (mda_size1 >
wipe_size ? wipe_size : mda_size1))) {
log_error("Failed to wipe new metadata area"); log_error("Failed to wipe new metadata area");
return 0; return 0;
} }
@ -936,7 +939,8 @@ static int _mda_setup(struct format_type *fmt,
mda_size2)) mda_size2))
return 0; return 0;
if (!dev_zero(pv->dev, start2, if (!dev_zero(pv->dev, start2,
mda_size1 > wipe_size ? wipe_size : mda_size1)) { (size_t) (mda_size1 >
wipe_size ? wipe_size : mda_size1))) {
log_error("Failed to wipe new metadata area"); log_error("Failed to wipe new metadata area");
return 0; return 0;
} }
@ -949,7 +953,7 @@ static int _mda_setup(struct format_type *fmt,
/* Only for orphans */ /* Only for orphans */
/* Set label_sector to -1 if rewriting existing label into same sector */ /* Set label_sector to -1 if rewriting existing label into same sector */
static int _pv_write(struct format_type *fmt, struct physical_volume *pv, static int _pv_write(const struct format_type *fmt, struct physical_volume *pv,
struct list *mdas, int64_t label_sector) struct list *mdas, int64_t label_sector)
{ {
struct label *label; struct label *label;
@ -961,6 +965,8 @@ static int _pv_write(struct format_type *fmt, struct physical_volume *pv,
struct mda_header *mdah = (struct mda_header *) buf; struct mda_header *mdah = (struct mda_header *) buf;
uint64_t adjustment; uint64_t adjustment;
/* FIXME Test mode don't update cache? */
if (!(info = cache_add(fmt->labeller, (char *) &pv->id, pv->dev, if (!(info = cache_add(fmt->labeller, (char *) &pv->id, pv->dev,
ORPHAN, NULL))) { ORPHAN, NULL))) {
stack; stack;
@ -1019,7 +1025,9 @@ static int _pv_write(struct format_type *fmt, struct physical_volume *pv,
pv->pe_start += (PE_ALIGN - adjustment); pv->pe_start += (PE_ALIGN - adjustment);
} }
} }
if (!add_da(fmt, NULL, &info->das, pv->pe_start << SECTOR_SHIFT, 0)) { if (!add_da
(fmt, NULL, &info->das, pv->pe_start << SECTOR_SHIFT,
__UINT64_C(0))) {
stack; stack;
return 0; return 0;
} }
@ -1053,7 +1061,7 @@ static int _pv_write(struct format_type *fmt, struct physical_volume *pv,
return 1; return 1;
} }
static int _get_pv_from_vg(struct format_type *fmt, const char *vg_name, static int _get_pv_from_vg(const struct format_type *fmt, const char *vg_name,
const char *id, struct physical_volume *pv) const char *id, struct physical_volume *pv)
{ {
struct volume_group *vg; struct volume_group *vg;
@ -1073,7 +1081,7 @@ static int _get_pv_from_vg(struct format_type *fmt, const char *vg_name,
list_iterate(pvh, &vg->pvs) { list_iterate(pvh, &vg->pvs) {
pvl = list_item(pvh, struct pv_list); pvl = list_item(pvh, struct pv_list);
if (id_equal(&pvl->pv->id, (struct id *) id)) { if (id_equal(&pvl->pv->id, (const struct id *) id)) {
memcpy(pv, pvl->pv, sizeof(*pv)); memcpy(pv, pvl->pv, sizeof(*pv));
return 1; return 1;
} }
@ -1105,7 +1113,7 @@ static int _add_raw(struct list *raw_list, struct device_area *dev_area)
return 1; return 1;
} }
static int _pv_read(struct format_type *fmt, const char *pv_name, static int _pv_read(const struct format_type *fmt, const char *pv_name,
struct physical_volume *pv, struct list *mdas) struct physical_volume *pv, struct list *mdas)
{ {
struct label *label; struct label *label;
@ -1121,6 +1129,7 @@ static int _pv_read(struct format_type *fmt, const char *pv_name,
return 0; return 0;
} }
/* FIXME Optimise out repeated reading when cache lock held */
if (!(label_read(dev, &label))) { if (!(label_read(dev, &label))) {
stack; stack;
return 0; return 0;
@ -1210,7 +1219,7 @@ static void _free_raws(struct list *raw_list)
} }
} }
static void _destroy(struct format_type *fmt) static void _destroy(const struct format_type *fmt)
{ {
if (fmt->private) { if (fmt->private) {
_free_dirs(&((struct mda_lists *) fmt->private)->dirs); _free_dirs(&((struct mda_lists *) fmt->private)->dirs);
@ -1218,7 +1227,7 @@ static void _destroy(struct format_type *fmt)
dbg_free(fmt->private); dbg_free(fmt->private);
} }
dbg_free(fmt); dbg_free((void *) fmt);
} }
static struct metadata_area_ops _metadata_text_file_ops = { static struct metadata_area_ops _metadata_text_file_ops = {
@ -1243,7 +1252,7 @@ static struct metadata_area_ops _metadata_text_raw_ops = {
}; };
/* pvmetadatasize in sectors */ /* pvmetadatasize in sectors */
static int _pv_setup(struct format_type *fmt, static int _pv_setup(const struct format_type *fmt,
uint64_t pe_start, uint32_t extent_count, uint64_t pe_start, uint32_t extent_count,
uint32_t extent_size, uint32_t extent_size,
int pvmetadatacopies, int pvmetadatacopies,
@ -1334,8 +1343,8 @@ static int _pv_setup(struct format_type *fmt,
} }
/* NULL vgname means use only the supplied context e.g. an archive file */ /* NULL vgname means use only the supplied context e.g. an archive file */
static struct format_instance *_create_text_instance(struct format_type *fmt, static struct format_instance *_create_text_instance(const struct format_type
const char *vgname, *fmt, const char *vgname,
void *context) void *context)
{ {
struct format_instance *fid; struct format_instance *fid;
@ -1408,6 +1417,7 @@ static struct format_instance *_create_text_instance(struct format_type *fmt,
/* FIXME Allow multiple dev_areas inside area */ /* FIXME Allow multiple dev_areas inside area */
memcpy(&mdac->area, &rl->dev_area, sizeof(mdac->area)); memcpy(&mdac->area, &rl->dev_area, sizeof(mdac->area));
mda->ops = &_metadata_text_raw_ops; mda->ops = &_metadata_text_raw_ops;
/* FIXME MISTAKE? mda->metadata_locn = context; */
list_add(&fid->metadata_areas, &mda->list); list_add(&fid->metadata_areas, &mda->list);
} }

View File

@ -36,19 +36,19 @@ struct format_type *create_text_format(struct cmd_context *cmd);
void *create_text_context(struct cmd_context *cmd, const char *path, void *create_text_context(struct cmd_context *cmd, const char *path,
const char *desc); const char *desc);
struct labeller *text_labeller_create(struct format_type *fmt); struct labeller *text_labeller_create(const struct format_type *fmt);
int pvhdr_read(struct device *dev, char *buf); int pvhdr_read(struct device *dev, char *buf);
int add_da(struct format_type *fmt, struct pool *mem, struct list *das, int add_da(const struct format_type *fmt, struct pool *mem, struct list *das,
uint64_t start, uint64_t size); uint64_t start, uint64_t size);
void del_das(struct list *das); void del_das(struct list *das);
int add_mda(struct format_type *fmt, struct pool *mem, struct list *mdas, int add_mda(const struct format_type *fmt, struct pool *mem, struct list *mdas,
struct device *dev, uint64_t start, uint64_t size); struct device *dev, uint64_t start, uint64_t size);
void del_mdas(struct list *mdas); void del_mdas(struct list *mdas);
int vgname_from_mda(struct format_type *fmt, struct device_area *dev_area, int vgname_from_mda(const struct format_type *fmt, struct device_area *dev_area,
char *buf, uint32_t size); char *buf, uint32_t size);
#endif #endif

View File

@ -214,7 +214,7 @@ static int _read_segment(struct pool *mem, struct volume_group *vg,
struct logical_volume *lv, struct config_node *sn, struct logical_volume *lv, struct config_node *sn,
struct hash_table *pv_hash) struct hash_table *pv_hash)
{ {
int s; unsigned int s;
uint32_t stripes = 0; uint32_t stripes = 0;
struct lv_segment *seg; struct lv_segment *seg;
struct config_node *cn; struct config_node *cn;

View File

@ -80,7 +80,7 @@ static int _write(struct label *label, char *buf)
return 1; return 1;
} }
int add_da(struct format_type *fmt, struct pool *mem, struct list *das, int add_da(const struct format_type *fmt, struct pool *mem, struct list *das,
uint64_t start, uint64_t size) uint64_t start, uint64_t size)
{ {
struct data_area_list *dal; struct data_area_list *dal;
@ -117,7 +117,7 @@ void del_das(struct list *das)
} }
} }
int add_mda(struct format_type *fmt, struct pool *mem, struct list *mdas, int add_mda(const struct format_type *fmt, struct pool *mem, struct list *mdas,
struct device *dev, uint64_t start, uint64_t size) struct device *dev, uint64_t start, uint64_t size)
{ {
/* FIXME List size restricted by pv_header SECTOR_SIZE */ /* FIXME List size restricted by pv_header SECTOR_SIZE */
@ -264,7 +264,7 @@ struct label_ops _text_ops = {
destroy:_destroy destroy:_destroy
}; };
struct labeller *text_labeller_create(struct format_type *fmt) struct labeller *text_labeller_create(const struct format_type *fmt)
{ {
struct labeller *l; struct labeller *l;
@ -274,7 +274,7 @@ struct labeller *text_labeller_create(struct format_type *fmt)
} }
l->ops = &_text_ops; l->ops = &_text_ops;
l->private = (void *) fmt; l->private = (const void *) fmt;
return l; return l;
} }

View File

@ -117,7 +117,8 @@ static struct labeller *_find_labeller(struct device *dev, char *buf,
return NULL; return NULL;
} }
if (dev_read(dev, 0, LABEL_SCAN_SIZE, readbuf) != LABEL_SCAN_SIZE) { if (dev_read(dev, __UINT64_C(0), LABEL_SCAN_SIZE, readbuf) !=
LABEL_SCAN_SIZE) {
log_debug("%s: Failed to read label area", dev_name(dev)); log_debug("%s: Failed to read label area", dev_name(dev));
goto out; goto out;
} }
@ -204,7 +205,8 @@ int label_remove(struct device *dev)
return 0; return 0;
} }
if (dev_read(dev, 0, LABEL_SCAN_SIZE, readbuf) != LABEL_SCAN_SIZE) { if (dev_read(dev, __UINT64_C(0), LABEL_SCAN_SIZE, readbuf) !=
LABEL_SCAN_SIZE) {
log_debug("%s: Failed to read label area", dev_name(dev)); log_debug("%s: Failed to read label area", dev_name(dev));
goto out; goto out;
} }

View File

@ -76,7 +76,7 @@ struct label_ops {
struct labeller { struct labeller {
struct label_ops *ops; struct label_ops *ops;
void *private; const void *private;
}; };
int label_init(void); int label_init(void);

View File

@ -72,7 +72,7 @@ static int _release_lock(const char *file)
return 0; return 0;
} }
void fin_file_locking(void) static void _fin_file_locking(void)
{ {
_release_lock(NULL); _release_lock(NULL);
} }
@ -90,7 +90,7 @@ static void _remove_ctrl_c_handler()
_handler_installed = 0; _handler_installed = 0;
} }
void _trap_ctrl_c(int signal) static void _trap_ctrl_c(int sig)
{ {
_remove_ctrl_c_handler(); _remove_ctrl_c_handler();
log_error("CTRL-c detected: giving up waiting for lock"); log_error("CTRL-c detected: giving up waiting for lock");
@ -183,7 +183,8 @@ static int _lock_file(const char *file, int flags)
return 0; return 0;
} }
int file_lock_resource(struct cmd_context *cmd, const char *resource, int flags) static int _file_lock_resource(struct cmd_context *cmd, const char *resource,
int flags)
{ {
char lockfile[PATH_MAX]; char lockfile[PATH_MAX];
@ -231,8 +232,8 @@ int file_lock_resource(struct cmd_context *cmd, const char *resource, int flags)
int init_file_locking(struct locking_type *locking, struct config_tree *cf) int init_file_locking(struct locking_type *locking, struct config_tree *cf)
{ {
locking->lock_resource = file_lock_resource; locking->lock_resource = _file_lock_resource;
locking->fin_locking = fin_file_locking; locking->fin_locking = _fin_file_locking;
/* Get lockfile directory from config file */ /* Get lockfile directory from config file */
strncpy(_lock_dir, find_config_str(cf->root, "global/locking_dir", strncpy(_lock_dir, find_config_str(cf->root, "global/locking_dir",

View File

@ -147,7 +147,7 @@ int check_lvm1_vg_inactive(struct cmd_context *cmd, const char *vgname)
* VG locking is by VG name. * VG locking is by VG name.
* FIXME This should become VG uuid. * FIXME This should become VG uuid.
*/ */
int _lock_vol(struct cmd_context *cmd, const char *resource, int flags) static int _lock_vol(struct cmd_context *cmd, const char *resource, int flags)
{ {
_block_signals(); _block_signals();
@ -174,7 +174,7 @@ int lock_vol(struct cmd_context *cmd, const char *vol, int flags)
return 0; return 0;
case LCK_LV: case LCK_LV:
/* Suspend LV if it's active. */ /* Suspend LV if it's active. */
strncpy(resource, (char *) vol, sizeof(resource)); strncpy(resource, vol, sizeof(resource));
break; break;
default: default:
log_error("Unrecognised lock scope: %d", log_error("Unrecognised lock scope: %d",

View File

@ -13,14 +13,12 @@ typedef int (*lock_resource_fn)(struct cmd_context *cmd, const char *resource,
typedef void (*fin_lock_fn) (void); typedef void (*fin_lock_fn) (void);
struct locking_type { struct locking_type {
lock_resource_fn lock_resource; lock_resource_fn lock_resource;
fin_lock_fn fin_locking; fin_lock_fn fin_locking;
}; };
/* /*
* Locking types * Locking types
*/ */
@ -29,4 +27,3 @@ int init_no_locking(struct locking_type *locking, struct config_tree *cf);
int init_file_locking(struct locking_type *locking, struct config_tree *cf); int init_file_locking(struct locking_type *locking, struct config_tree *cf);
int init_external_locking(struct locking_type *locking, struct config_tree *cf); int init_external_locking(struct locking_type *locking, struct config_tree *cf);

View File

@ -10,15 +10,13 @@
#include "lvm-string.h" #include "lvm-string.h"
#include "toolcontext.h" #include "toolcontext.h"
#include <assert.h>
/* /*
* These functions adjust the pe counts in pv's * These functions adjust the pe counts in pv's
* after we've added or removed segments. * after we've added or removed segments.
*/ */
static void _get_extents(struct lv_segment *seg) static void _get_extents(struct lv_segment *seg)
{ {
int s, count; unsigned int s, count;
struct physical_volume *pv; struct physical_volume *pv;
for (s = 0; s < seg->stripes; s++) { for (s = 0; s < seg->stripes; s++) {
@ -30,7 +28,7 @@ static void _get_extents(struct lv_segment *seg)
static void _put_extents(struct lv_segment *seg) static void _put_extents(struct lv_segment *seg)
{ {
int s, count; unsigned int s, count;
struct physical_volume *pv; struct physical_volume *pv;
for (s = 0; s < seg->stripes; s++) { for (s = 0; s < seg->stripes; s++) {
@ -42,7 +40,7 @@ static void _put_extents(struct lv_segment *seg)
} }
} }
static struct lv_segment *_alloc_segment(struct pool *mem, int stripes) static struct lv_segment *_alloc_segment(struct pool *mem, uint32_t stripes)
{ {
struct lv_segment *seg; struct lv_segment *seg;
uint32_t len = sizeof(*seg) + (stripes * sizeof(seg->area[0])); uint32_t len = sizeof(*seg) + (stripes * sizeof(seg->area[0]));
@ -57,9 +55,9 @@ static struct lv_segment *_alloc_segment(struct pool *mem, int stripes)
static int _alloc_stripe_area(struct logical_volume *lv, uint32_t stripes, static int _alloc_stripe_area(struct logical_volume *lv, uint32_t stripes,
uint32_t stripe_size, uint32_t stripe_size,
struct pv_area **areas, uint32_t *index) struct pv_area **areas, uint32_t *ix)
{ {
uint32_t count = lv->le_count - *index; uint32_t count = lv->le_count - *ix;
uint32_t per_area = count / stripes; uint32_t per_area = count / stripes;
uint32_t smallest = areas[stripes - 1]->count; uint32_t smallest = areas[stripes - 1]->count;
uint32_t s; uint32_t s;
@ -75,7 +73,7 @@ static int _alloc_stripe_area(struct logical_volume *lv, uint32_t stripes,
seg->lv = lv; seg->lv = lv;
seg->type = SEG_STRIPED; seg->type = SEG_STRIPED;
seg->le = *index; seg->le = *ix;
seg->len = per_area * stripes; seg->len = per_area * stripes;
seg->stripes = stripes; seg->stripes = stripes;
seg->stripe_size = stripe_size; seg->stripe_size = stripe_size;
@ -88,14 +86,14 @@ static int _alloc_stripe_area(struct logical_volume *lv, uint32_t stripes,
} }
list_add(&lv->segments, &seg->list); list_add(&lv->segments, &seg->list);
*index += seg->len; *ix += seg->len;
return 1; return 1;
} }
static int _comp_area(const void *l, const void *r) static int _comp_area(const void *l, const void *r)
{ {
struct pv_area *lhs = *((struct pv_area **) l); const struct pv_area *lhs = *((const struct pv_area **) l);
struct pv_area *rhs = *((struct pv_area **) r); const struct pv_area *rhs = *((const struct pv_area **) r);
if (lhs->count < rhs->count) if (lhs->count < rhs->count)
return 1; return 1;
@ -113,7 +111,7 @@ static int _alloc_striped(struct logical_volume *lv,
int r = 0; int r = 0;
struct list *pvmh; struct list *pvmh;
struct pv_area **areas; struct pv_area **areas;
int pv_count = 0, index; unsigned int pv_count = 0, ix;
struct pv_map *pvm; struct pv_map *pvm;
size_t len; size_t len;
@ -129,18 +127,17 @@ static int _alloc_striped(struct logical_volume *lv,
while (allocated != lv->le_count) { while (allocated != lv->le_count) {
index = 0; ix = 0;
list_iterate(pvmh, pvms) { list_iterate(pvmh, pvms) {
pvm = list_item(pvmh, struct pv_map); pvm = list_item(pvmh, struct pv_map);
if (list_empty(&pvm->areas)) if (list_empty(&pvm->areas))
continue; continue;
areas[index++] = list_item(pvm->areas.n, areas[ix++] = list_item(pvm->areas.n, struct pv_area);
struct pv_area);
} }
if (index < stripes) { if (ix < stripes) {
log_error("Insufficient allocatable extents suitable " log_error("Insufficient allocatable extents suitable "
"for striping for logical volume " "for striping for logical volume "
"%s: %u required", lv->name, lv->le_count); "%s: %u required", lv->name, lv->le_count);
@ -148,7 +145,7 @@ static int _alloc_striped(struct logical_volume *lv,
} }
/* sort the areas so we allocate from the biggest */ /* sort the areas so we allocate from the biggest */
qsort(areas, index, sizeof(*areas), _comp_area); qsort(areas, ix, sizeof(*areas), _comp_area);
if (!_alloc_stripe_area(lv, stripes, stripe_size, areas, if (!_alloc_stripe_area(lv, stripes, stripe_size, areas,
&allocated)) { &allocated)) {
@ -169,14 +166,14 @@ static int _alloc_striped(struct logical_volume *lv,
* the complete area then the area is split, otherwise the area * the complete area then the area is split, otherwise the area
* is unlinked from the pv_map. * is unlinked from the pv_map.
*/ */
static int _alloc_linear_area(struct logical_volume *lv, uint32_t *index, static int _alloc_linear_area(struct logical_volume *lv, uint32_t *ix,
struct pv_map *map, struct pv_area *pva) struct pv_map *map, struct pv_area *pva)
{ {
uint32_t count, remaining; uint32_t count, remaining;
struct lv_segment *seg; struct lv_segment *seg;
count = pva->count; count = pva->count;
remaining = lv->le_count - *index; remaining = lv->le_count - *ix;
if (count > remaining) if (count > remaining)
count = remaining; count = remaining;
@ -187,7 +184,7 @@ static int _alloc_linear_area(struct logical_volume *lv, uint32_t *index,
seg->lv = lv; seg->lv = lv;
seg->type = SEG_STRIPED; seg->type = SEG_STRIPED;
seg->le = *index; seg->le = *ix;
seg->len = count; seg->len = count;
seg->stripe_size = 0; seg->stripe_size = 0;
seg->stripes = 1; seg->stripes = 1;
@ -197,7 +194,7 @@ static int _alloc_linear_area(struct logical_volume *lv, uint32_t *index,
list_add(&lv->segments, &seg->list); list_add(&lv->segments, &seg->list);
consume_pv_area(pva, count); consume_pv_area(pva, count);
*index += count; *ix += count;
return 1; return 1;
} }

View File

@ -14,7 +14,7 @@
*/ */
static int _merge(struct lv_segment *first, struct lv_segment *second) static int _merge(struct lv_segment *first, struct lv_segment *second)
{ {
int s; unsigned int s;
uint32_t width; uint32_t width;
if (!first || if (!first ||

View File

@ -12,7 +12,7 @@
#include "lvm-string.h" #include "lvm-string.h"
#include "cache.h" #include "cache.h"
int _add_pv_to_vg(struct format_instance *fid, struct volume_group *vg, static int _add_pv_to_vg(struct format_instance *fid, struct volume_group *vg,
const char *pv_name) const char *pv_name)
{ {
struct pv_list *pvl; struct pv_list *pvl;
@ -68,7 +68,8 @@ int _add_pv_to_vg(struct format_instance *fid, struct volume_group *vg,
pv->pe_alloc_count = 0; pv->pe_alloc_count = 0;
if (!fid->fmt->ops->pv_setup(fid->fmt, 0, 0, vg->extent_size, 0, 0, if (!fid->fmt->ops->pv_setup(fid->fmt, __UINT64_C(0), 0,
vg->extent_size, 0, __UINT64_C(0),
&fid->metadata_areas, pv, vg)) { &fid->metadata_areas, pv, vg)) {
log_error("Format-specific setup of physical volume '%s' " log_error("Format-specific setup of physical volume '%s' "
"failed.", pv_name); "failed.", pv_name);
@ -98,6 +99,30 @@ int _add_pv_to_vg(struct format_instance *fid, struct volume_group *vg,
return 1; return 1;
} }
int vg_rename(struct cmd_context *cmd, struct volume_group *vg,
const char *new_name)
{
struct pool *mem = cmd->mem;
struct physical_volume *pv;
struct list *pvh;
if (!(vg->name = pool_strdup(mem, new_name))) {
log_error("vg->name allocation failed for '%s'", new_name);
return 0;
}
list_iterate(pvh, &vg->pvs) {
pv = list_item(pvh, struct pv_list)->pv;
if (!(pv->vg_name = pool_strdup(mem, new_name))) {
log_error("pv->vg_name allocation failed for '%s'",
dev_name(pv->dev));
return 0;
}
}
return 1;
}
int vg_extend(struct format_instance *fid, int vg_extend(struct format_instance *fid,
struct volume_group *vg, int pv_count, char **pv_names) struct volume_group *vg, int pv_count, char **pv_names)
{ {
@ -118,7 +143,7 @@ int vg_extend(struct format_instance *fid,
const char *strip_dir(const char *vg_name, const char *dev_dir) const char *strip_dir(const char *vg_name, const char *dev_dir)
{ {
int len = strlen(dev_dir); size_t len = strlen(dev_dir);
if (!strncmp(vg_name, dev_dir, len)) if (!strncmp(vg_name, dev_dir, len))
vg_name += len; vg_name += len;
@ -126,8 +151,8 @@ const char *strip_dir(const char *vg_name, const char *dev_dir)
} }
struct volume_group *vg_create(struct cmd_context *cmd, const char *vg_name, struct volume_group *vg_create(struct cmd_context *cmd, const char *vg_name,
uint32_t extent_size, int max_pv, int max_lv, uint32_t extent_size, uint32_t max_pv,
int pv_count, char **pv_names) uint32_t max_lv, int pv_count, char **pv_names)
{ {
struct volume_group *vg; struct volume_group *vg;
struct pool *mem = cmd->mem; struct pool *mem = cmd->mem;
@ -207,7 +232,7 @@ struct volume_group *vg_create(struct cmd_context *cmd, const char *vg_name,
} }
/* Sizes in sectors */ /* Sizes in sectors */
struct physical_volume *pv_create(struct format_type *fmt, struct physical_volume *pv_create(const struct format_type *fmt,
struct device *dev, struct device *dev,
struct id *id, uint64_t size, struct id *id, uint64_t size,
uint64_t pe_start, uint64_t pe_start,
@ -231,12 +256,11 @@ struct physical_volume *pv_create(struct format_type *fmt,
pv->dev = dev; pv->dev = dev;
if (!(pv->vg_name = pool_alloc(mem, NAME_LEN))) { if (!(pv->vg_name = pool_zalloc(mem, NAME_LEN))) {
stack; stack;
goto bad; goto bad;
} }
*pv->vg_name = 0;
pv->status = ALLOCATABLE_PV; pv->status = ALLOCATABLE_PV;
if (!dev_get_size(pv->dev, &pv->size)) { if (!dev_get_size(pv->dev, &pv->size)) {
@ -330,7 +354,8 @@ struct lv_list *find_lv_in_vg(struct volume_group *vg, const char *lv_name)
return NULL; return NULL;
} }
struct lv_list *find_lv_in_vg_by_lvid(struct volume_group *vg, union lvid *lvid) struct lv_list *find_lv_in_vg_by_lvid(struct volume_group *vg,
const union lvid *lvid)
{ {
struct list *lvh; struct list *lvh;
struct lv_list *lvl; struct lv_list *lvl;
@ -429,7 +454,7 @@ int vg_write(struct volume_group *vg)
} }
/* Make orphan PVs look like a VG */ /* Make orphan PVs look like a VG */
struct volume_group *_vg_read_orphans(struct cmd_context *cmd) static struct volume_group *_vg_read_orphans(struct cmd_context *cmd)
{ {
struct cache_vginfo *vginfo; struct cache_vginfo *vginfo;
struct list *ih; struct list *ih;
@ -484,11 +509,11 @@ struct volume_group *vg_read(struct cmd_context *cmd, const char *vgname,
int *consistent) int *consistent)
{ {
struct format_instance *fid; struct format_instance *fid;
struct format_type *fmt; const struct format_type *fmt;
struct volume_group *vg, *correct_vg; struct volume_group *vg, *correct_vg = NULL;
struct list *mdah; struct list *mdah;
struct metadata_area *mda; struct metadata_area *mda;
int inconsistent = 0, first_time = 1; int inconsistent = 0;
if (!*vgname) { if (!*vgname) {
*consistent = 1; *consistent = 1;
@ -521,9 +546,8 @@ struct volume_group *vg_read(struct cmd_context *cmd, const char *vgname,
inconsistent = 1; inconsistent = 1;
continue; continue;
} }
if (first_time) { if (!correct_vg) {
correct_vg = vg; correct_vg = vg;
first_time = 0;
continue; continue;
} }
/* FIXME Also ensure contents same - checksum compare? */ /* FIXME Also ensure contents same - checksum compare? */
@ -535,7 +559,7 @@ struct volume_group *vg_read(struct cmd_context *cmd, const char *vgname,
} }
/* Failed to find VG */ /* Failed to find VG */
if (first_time) { if (!correct_vg) {
stack; stack;
return NULL; return NULL;
} }
@ -624,9 +648,9 @@ struct logical_volume *lv_from_lvid(struct cmd_context *cmd, const char *lvid_s)
{ {
struct lv_list *lvl; struct lv_list *lvl;
struct volume_group *vg; struct volume_group *vg;
union lvid *lvid; const union lvid *lvid;
lvid = (union lvid *) lvid_s; lvid = (const union lvid *) lvid_s;
log_very_verbose("Finding volume group for uuid %s", lvid_s); log_very_verbose("Finding volume group for uuid %s", lvid_s);
if (!(vg = vg_read_by_vgid(cmd, lvid->id[0].uuid))) { if (!(vg = vg_read_by_vgid(cmd, lvid->id[0].uuid))) {

View File

@ -14,6 +14,7 @@
#include "dev-cache.h" #include "dev-cache.h"
#include "list.h" #include "list.h"
#include "uuid.h" #include "uuid.h"
#include <sys/types.h> #include <sys/types.h>
#include <asm/page.h> #include <asm/page.h>
@ -21,7 +22,6 @@
#define MAX_STRIPES 128 #define MAX_STRIPES 128
#define SECTOR_SHIFT 9L #define SECTOR_SHIFT 9L
#define SECTOR_SIZE ( 1L << SECTOR_SHIFT ) #define SECTOR_SIZE ( 1L << SECTOR_SHIFT )
#define STRIPE_SIZE_DEFAULT 16 /* 16KB */
#define STRIPE_SIZE_MIN ( PAGE_SIZE >> SECTOR_SHIFT) /* PAGESIZE in sectors */ #define STRIPE_SIZE_MIN ( PAGE_SIZE >> SECTOR_SHIFT) /* PAGESIZE in sectors */
#define STRIPE_SIZE_MAX ( 512L * 1024L >> SECTOR_SHIFT) /* 512 KB in sectors */ #define STRIPE_SIZE_MAX ( 512L * 1024L >> SECTOR_SHIFT) /* 512 KB in sectors */
#define PV_MIN_SIZE ( 512L * 1024L >> SECTOR_SHIFT) /* 512 KB in sectors */ #define PV_MIN_SIZE ( 512L * 1024L >> SECTOR_SHIFT) /* 512 KB in sectors */
@ -84,14 +84,14 @@ struct format_type {
struct physical_volume { struct physical_volume {
struct id id; struct id id;
struct device *dev; struct device *dev;
struct format_type *fmt; const struct format_type *fmt;
char *vg_name; const char *vg_name;
uint32_t status; uint32_t status;
uint64_t size; uint64_t size;
/* physical extents */ /* physical extents */
uint64_t pe_size; uint32_t pe_size;
uint64_t pe_start; uint64_t pe_start;
uint32_t pe_count; uint32_t pe_count;
uint32_t pe_alloc_count; uint32_t pe_alloc_count;
@ -134,7 +134,7 @@ struct metadata_area {
}; };
struct format_instance { struct format_instance {
struct format_type *fmt; const struct format_type *fmt;
struct list metadata_areas; /* e.g. metadata locations */ struct list metadata_areas; /* e.g. metadata locations */
}; };
@ -252,19 +252,19 @@ struct format_handler {
/* /*
* Scan any metadata areas that aren't referenced in PV labels * Scan any metadata areas that aren't referenced in PV labels
*/ */
int (*scan) (struct format_type * fmt); int (*scan) (const struct format_type * fmt);
/* /*
* Return PV with given path. * Return PV with given path.
*/ */
int (*pv_read) (struct format_type * fmt, const char *pv_name, int (*pv_read) (const struct format_type * fmt, const char *pv_name,
struct physical_volume * pv, struct list * mdas); struct physical_volume * pv, struct list * mdas);
/* /*
* Tweak an already filled out a pv ready for importing into a * Tweak an already filled out a pv ready for importing into a
* vg. eg. pe_count is format specific. * vg. eg. pe_count is format specific.
*/ */
int (*pv_setup) (struct format_type * fmt, int (*pv_setup) (const struct format_type * fmt,
uint64_t pe_start, uint32_t extent_count, uint64_t pe_start, uint32_t extent_count,
uint32_t extent_size, uint32_t extent_size,
int pvmetadatacopies, int pvmetadatacopies,
@ -275,8 +275,9 @@ struct format_handler {
* Write a PV structure to disk. Fails if the PV is in a VG ie * Write a PV structure to disk. Fails if the PV is in a VG ie
* pv->vg_name must be null. * pv->vg_name must be null.
*/ */
int (*pv_write) (struct format_type * fmt, struct physical_volume * pv, int (*pv_write) (const struct format_type * fmt,
struct list * mdas, int64_t label_sector); struct physical_volume * pv, struct list * mdas,
int64_t label_sector);
/* /*
* Tweak an already filled out a lv eg, check there * Tweak an already filled out a lv eg, check there
@ -294,8 +295,8 @@ struct format_handler {
/* /*
* Create format instance with a particular metadata area * Create format instance with a particular metadata area
*/ */
struct format_instance *(*create_instance) (struct format_type * fmt, struct format_instance *(*create_instance) (const struct format_type *
const char *vgname, fmt, const char *vgname,
void *context); void *context);
/* /*
@ -306,7 +307,7 @@ struct format_handler {
/* /*
* Destructor for format type * Destructor for format type
*/ */
void (*destroy) (struct format_type * fmt); void (*destroy) (const struct format_type * fmt);
}; };
/* /*
@ -328,7 +329,7 @@ int pv_write(struct cmd_context *cmd, struct physical_volume *pv,
/* pe_start and pe_end relate to any existing data so that new metadata /* pe_start and pe_end relate to any existing data so that new metadata
* areas can avoid overlap */ * areas can avoid overlap */
struct physical_volume *pv_create(struct format_type *fmt, struct physical_volume *pv_create(const struct format_type *fmt,
struct device *dev, struct device *dev,
struct id *id, struct id *id,
uint64_t size, uint64_t size,
@ -339,10 +340,11 @@ struct physical_volume *pv_create(struct format_type *fmt,
uint64_t pvmetadatasize, struct list *mdas); uint64_t pvmetadatasize, struct list *mdas);
struct volume_group *vg_create(struct cmd_context *cmd, const char *name, struct volume_group *vg_create(struct cmd_context *cmd, const char *name,
uint32_t extent_size, int max_pv, int max_lv, uint32_t extent_size, uint32_t max_pv,
int pv_count, char **pv_names); uint32_t max_lv, int pv_count, char **pv_names);
int vg_remove(struct volume_group *vg); int vg_remove(struct volume_group *vg);
int vg_rename(struct cmd_context *cmd, struct volume_group *vg,
const char *new_name);
int vg_extend(struct format_instance *fi, struct volume_group *vg, int vg_extend(struct format_instance *fi, struct volume_group *vg,
int pv_count, char **pv_names); int pv_count, char **pv_names);
@ -385,7 +387,7 @@ struct physical_volume *find_pv_in_vg_by_uuid(struct volume_group *vg,
/* Find an LV within a given VG */ /* Find an LV within a given VG */
struct lv_list *find_lv_in_vg(struct volume_group *vg, const char *lv_name); struct lv_list *find_lv_in_vg(struct volume_group *vg, const char *lv_name);
struct lv_list *find_lv_in_vg_by_lvid(struct volume_group *vg, struct lv_list *find_lv_in_vg_by_lvid(struct volume_group *vg,
union lvid *lvid); const union lvid *lvid);
/* Return the VG that contains a given LV (based on path given in lv_name) */ /* Return the VG that contains a given LV (based on path given in lv_name) */
/* or environment var */ /* or environment var */
@ -419,12 +421,12 @@ int lv_merge_segments(struct logical_volume *lv);
/* /*
* Useful functions for managing snapshots. * Useful functions for managing snapshots.
*/ */
int lv_is_origin(struct logical_volume *lv); int lv_is_origin(const struct logical_volume *lv);
int lv_is_cow(struct logical_volume *lv); int lv_is_cow(const struct logical_volume *lv);
struct snapshot *find_cow(struct logical_volume *lv); struct snapshot *find_cow(const struct logical_volume *lv);
struct snapshot *find_origin(struct logical_volume *lv); struct snapshot *find_origin(const struct logical_volume *lv);
struct list *find_snapshots(struct logical_volume *lv); struct list *find_snapshots(const struct logical_volume *lv);
int vg_add_snapshot(struct logical_volume *origin, int vg_add_snapshot(struct logical_volume *origin,
struct logical_volume *cow, struct logical_volume *cow,

View File

@ -8,8 +8,6 @@
#include "pv_map.h" #include "pv_map.h"
#include "hash.h" #include "hash.h"
#include <assert.h>
static int _create_maps(struct pool *mem, struct list *pvs, struct list *maps) static int _create_maps(struct pool *mem, struct list *pvs, struct list *maps)
{ {
struct list *tmp; struct list *tmp;
@ -42,7 +40,7 @@ static int _create_maps(struct pool *mem, struct list *pvs, struct list *maps)
} }
static int _set_allocated(struct hash_table *hash, static int _set_allocated(struct hash_table *hash,
struct physical_volume *pv, int pe) struct physical_volume *pv, uint32_t pe)
{ {
struct pv_map *pvm; struct pv_map *pvm;
@ -124,7 +122,7 @@ static int _fill_bitsets(struct volume_group *vg, struct list *maps)
static void _insert_area(struct list *head, struct pv_area *a) static void _insert_area(struct list *head, struct pv_area *a)
{ {
struct list *pvah; struct list *pvah;
struct pv_area *pva; struct pv_area *pva = NULL;
if (list_empty(head)) { if (list_empty(head)) {
list_add(head, &a->list); list_add(head, &a->list);

View File

@ -8,7 +8,7 @@
#include "metadata.h" #include "metadata.h"
#include "toolcontext.h" #include "toolcontext.h"
int lv_is_origin(struct logical_volume *lv) int lv_is_origin(const struct logical_volume *lv)
{ {
struct list *slh; struct list *slh;
struct snapshot *s; struct snapshot *s;
@ -22,7 +22,7 @@ int lv_is_origin(struct logical_volume *lv)
return 0; return 0;
} }
int lv_is_cow(struct logical_volume *lv) int lv_is_cow(const struct logical_volume *lv)
{ {
struct list *slh; struct list *slh;
struct snapshot *s; struct snapshot *s;
@ -36,7 +36,7 @@ int lv_is_cow(struct logical_volume *lv)
return 0; return 0;
} }
struct snapshot *find_origin(struct logical_volume *lv) struct snapshot *find_origin(const struct logical_volume *lv)
{ {
struct list *slh; struct list *slh;
struct snapshot *s; struct snapshot *s;
@ -50,7 +50,7 @@ struct snapshot *find_origin(struct logical_volume *lv)
return NULL; return NULL;
} }
struct snapshot *find_cow(struct logical_volume *lv) struct snapshot *find_cow(const struct logical_volume *lv)
{ {
struct list *slh; struct list *slh;
struct snapshot *s; struct snapshot *s;
@ -64,7 +64,7 @@ struct snapshot *find_cow(struct logical_volume *lv)
return NULL; return NULL;
} }
struct list *find_snapshots(struct logical_volume *lv) struct list *find_snapshots(const struct logical_volume *lv)
{ {
struct list *slh; struct list *slh;
struct list *snaplist; struct list *snaplist;

View File

@ -5,7 +5,8 @@
*/ */
#include "lib.h" #include "lib.h"
#include "lvm-types.h"
#include "crc.h"
/* Calculate an endian-independent CRC of supplied buffer */ /* Calculate an endian-independent CRC of supplied buffer */
uint32_t calc_crc(uint32_t initial, void *buf, uint32_t size) uint32_t calc_crc(uint32_t initial, void *buf, uint32_t size)

View File

@ -5,7 +5,7 @@
*/ */
/* /*
* This file must be included first by every source file. * This file must be included first by every library source file.
*/ */
#ifndef _LVM_LIB_H #ifndef _LVM_LIB_H
#define _LVM_LIB_H #define _LVM_LIB_H
@ -15,4 +15,6 @@
#include "log.h" #include "log.h"
#include "dbg_malloc.h" #include "dbg_malloc.h"
#include <assert.h>
#endif #endif

31
lib/misc/lvm-string.c Normal file
View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2001 Sistina Software (UK) Limited.
*
* This file is released under the LGPL.
*/
#include "lib.h"
#include "lvm-types.h"
#include "lvm-string.h"
/*
* On error, up to glibc 2.0.6, snprintf returned -1 if buffer was too small;
* From glibc 2.1 it returns number of chars (excl. trailing null) that would
* have been written had there been room.
*
* lvm_snprintf reverts to the old behaviour.
*/
int lvm_snprintf(char *buf, size_t bufsize, const char *format, ...)
{
int n;
va_list ap;
va_start(ap, format);
n = vsnprintf(buf, bufsize, format, ap);
va_end(ap);
if (n < 0 || (n > bufsize - 1))
return -1;
return n;
}

View File

@ -17,20 +17,6 @@
* *
* lvm_snprintf reverts to the old behaviour. * lvm_snprintf reverts to the old behaviour.
*/ */
static inline int lvm_snprintf(char *buf, size_t bufsize, int lvm_snprintf(char *buf, size_t bufsize, const char *format, ...);
const char *format, ...)
{
int n;
va_list ap;
va_start(ap, format);
n = vsnprintf(buf, bufsize, format, ap);
va_end(ap);
if (n < 0 || (n > bufsize - 1))
return -1;
return n;
}
#endif #endif

View File

@ -8,6 +8,7 @@
#include "lib.h" #include "lib.h"
#include "config.h" #include "config.h"
#include "lvm-string.h" #include "lvm-string.h"
#include "sharedlib.h"
#include <limits.h> #include <limits.h>
#include <sys/stat.h> #include <sys/stat.h>

View File

@ -6,8 +6,8 @@
#include "lib.h" #include "lib.h"
#include "lvm-types.h" #include "lvm-types.h"
#include "dbg_malloc.h"
#include <assert.h>
#include <stdarg.h> #include <stdarg.h>
struct memblock { struct memblock {
@ -66,7 +66,7 @@ void *malloc_aux(size_t s, const char *file, int line)
and fill in the boundary bytes */ and fill in the boundary bytes */
{ {
char *ptr = (char *) (nb + 1); char *ptr = (char *) (nb + 1);
int i; size_t i;
for (i = 0; i < s; i++) for (i = 0; i < s; i++)
*ptr++ = i & 0x1 ? (char) 0xba : (char) 0xbe; *ptr++ = i & 0x1 ? (char) 0xba : (char) 0xbe;
@ -87,7 +87,7 @@ void *malloc_aux(size_t s, const char *file, int line)
void free_aux(void *p) void free_aux(void *p)
{ {
char *ptr; char *ptr;
int i; size_t i;
struct memblock *mb = ((struct memblock *) p) - 1; struct memblock *mb = ((struct memblock *) p) - 1;
if (!p) if (!p)
return; return;
@ -173,7 +173,7 @@ void bounds_check(void)
{ {
struct memblock *mb = _head; struct memblock *mb = _head;
while (mb) { while (mb) {
int i; size_t i;
char *ptr = ((char *) (mb + 1)) + mb->length; char *ptr = ((char *) (mb + 1)) + mb->length;
for (i = 0; i < sizeof(unsigned long); i++) for (i = 0; i < sizeof(unsigned long); i++)
if (*ptr++ != (char) mb->id) if (*ptr++ != (char) mb->id)

View File

@ -7,8 +7,6 @@
#include "lib.h" #include "lib.h"
#include "pool.h" #include "pool.h"
#include <assert.h>
struct block { struct block {
struct block *next; struct block *next;
size_t size; size_t size;

View File

@ -10,7 +10,6 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
/* /*
* The pool allocator is useful when you are going to allocate * The pool allocator is useful when you are going to allocate
* lots of memory, use the memory for a bit, and then free the * lots of memory, use the memory for a bit, and then free the
@ -108,7 +107,8 @@ void pool_abandon_object(struct pool *p);
/* utilities */ /* utilities */
char *pool_strdup(struct pool *p, const char *str); char *pool_strdup(struct pool *p, const char *str);
static inline void *pool_zalloc(struct pool *p, size_t s) { static inline void *pool_zalloc(struct pool *p, size_t s)
{
void *ptr = pool_alloc(p, s); void *ptr = pool_alloc(p, s);
if (ptr) if (ptr)
@ -118,4 +118,3 @@ static inline void *pool_zalloc(struct pool *p, size_t s) {
} }
#endif #endif

View File

@ -10,8 +10,6 @@
#include "ttree.h" #include "ttree.h"
#include "bitset.h" #include "bitset.h"
#include <assert.h>
struct dfa_state { struct dfa_state {
int final; int final;
struct dfa_state *lookup[256]; struct dfa_state *lookup[256];
@ -25,7 +23,8 @@ struct state_queue {
struct matcher { /* Instance variables for the lexer */ struct matcher { /* Instance variables for the lexer */
struct dfa_state *start; struct dfa_state *start;
int num_nodes, nodes_entered; unsigned num_nodes;
int nodes_entered;
struct rx_node **nodes; struct rx_node **nodes;
struct pool *scratch, *mem; struct pool *scratch, *mem;
}; };
@ -184,7 +183,7 @@ static struct state_queue *_create_state_queue(struct pool *mem,
static int _calc_states(struct matcher *m, struct rx_node *rx) static int _calc_states(struct matcher *m, struct rx_node *rx)
{ {
int iwidth = (m->num_nodes / BITS_PER_INT) + 1; unsigned iwidth = (m->num_nodes / BITS_PER_INT) + 1;
struct ttree *tt = ttree_create(m->scratch, iwidth); struct ttree *tt = ttree_create(m->scratch, iwidth);
struct state_queue *h, *t, *tmp; struct state_queue *h, *t, *tmp;
struct dfa_state *dfa, *ldfa; struct dfa_state *dfa, *ldfa;
@ -260,10 +259,12 @@ static int _calc_states(struct matcher *m, struct rx_node *rx)
return 1; return 1;
} }
struct matcher *matcher_create(struct pool *mem, const char **patterns, int num) struct matcher *matcher_create(struct pool *mem, const char **patterns,
unsigned num)
{ {
char *all, *ptr; char *all, *ptr;
int i, len = 0; int i;
size_t len = 0;
struct rx_node *rx; struct rx_node *rx;
struct pool *scratch = pool_create(10 * 1024); struct pool *scratch = pool_create(10 * 1024);
struct matcher *m; struct matcher *m;
@ -328,10 +329,10 @@ struct matcher *matcher_create(struct pool *mem, const char **patterns, int num)
return NULL; return NULL;
} }
static inline struct dfa_state *_step_matcher(unsigned char c, static inline struct dfa_state *_step_matcher(int c,
struct dfa_state *cs, int *r) struct dfa_state *cs, int *r)
{ {
if (!(cs = cs->lookup[c])) if (!(cs = cs->lookup[(unsigned char) c]))
return NULL; return NULL;
if (cs->final && (cs->final > *r)) if (cs->final && (cs->final > *r))

View File

@ -10,8 +10,8 @@
#include "pool.h" #include "pool.h"
struct matcher; struct matcher;
struct matcher *matcher_create(struct pool *mem, struct matcher *matcher_create(struct pool *mem, const char **patterns,
const char **patterns, int num); unsigned num);
int matcher_run(struct matcher *m, const char *begin); int matcher_run(struct matcher *m, const char *begin);

View File

@ -20,7 +20,7 @@ struct ttree {
struct node *root; struct node *root;
}; };
struct node **_lookup_single(struct node **c, unsigned int k) static struct node **_lookup_single(struct node **c, unsigned int k)
{ {
while (*c) { while (*c) {
if (k < (*c)->k) if (k < (*c)->k)

View File

@ -53,7 +53,7 @@ struct report_handle {
struct pool *mem; struct pool *mem;
report_type_t type; report_type_t type;
char *field_prefix; const char *field_prefix;
uint32_t flags; uint32_t flags;
const char *separator; const char *separator;
@ -93,8 +93,8 @@ struct field {
struct list list; struct list list;
struct field_properties *props; struct field_properties *props;
char *report_string; /* Formatted ready for display */ const char *report_string; /* Formatted ready for display */
void *sort_value; /* Raw value for sorting */ const void *sort_value; /* Raw value for sorting */
}; };
struct row { struct row {
@ -110,12 +110,14 @@ struct row {
static int _string_disp(struct report_handle *rh, struct field *field, static int _string_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
if (!(field->report_string = pool_strdup(rh->mem, *(char **) data))) { if (!
(field->report_string =
pool_strdup(rh->mem, *(const char **) data))) {
log_error("pool_strdup failed"); log_error("pool_strdup failed");
return 0; return 0;
} }
field->sort_value = (void *) field->report_string; field->sort_value = (const void *) field->report_string;
return 1; return 1;
} }
@ -123,7 +125,7 @@ static int _string_disp(struct report_handle *rh, struct field *field,
static int _dev_name_disp(struct report_handle *rh, struct field *field, static int _dev_name_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
const char *name = dev_name(*(struct device **) data); const char *name = dev_name(*(const struct device **) data);
return _string_disp(rh, field, &name); return _string_disp(rh, field, &name);
} }
@ -131,11 +133,11 @@ static int _dev_name_disp(struct report_handle *rh, struct field *field,
static int _vgfmt_disp(struct report_handle *rh, struct field *field, static int _vgfmt_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct volume_group *vg = (struct volume_group *) data; const struct volume_group *vg = (const struct volume_group *) data;
if (!vg->fid) { if (!vg->fid) {
field->report_string = ""; field->report_string = "";
field->sort_value = (void *) field->report_string; field->sort_value = (const void *) field->report_string;
return 1; return 1;
} }
@ -145,11 +147,12 @@ static int _vgfmt_disp(struct report_handle *rh, struct field *field,
static int _pvfmt_disp(struct report_handle *rh, struct field *field, static int _pvfmt_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct physical_volume *pv = (struct physical_volume *) data; const struct physical_volume *pv =
(const struct physical_volume *) data;
if (!pv->fmt) { if (!pv->fmt) {
field->report_string = ""; field->report_string = "";
field->sort_value = (void *) field->report_string; field->sort_value = (const void *) field->report_string;
return 1; return 1;
} }
@ -159,51 +162,53 @@ static int _pvfmt_disp(struct report_handle *rh, struct field *field,
static int _lvstatus_disp(struct report_handle *rh, struct field *field, static int _lvstatus_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct logical_volume *lv = (struct logical_volume *) data; const struct logical_volume *lv = (const struct logical_volume *) data;
struct dm_info info; struct dm_info info;
char *repstr;
if (!(field->report_string = pool_zalloc(rh->mem, 7))) { if (!(repstr = pool_zalloc(rh->mem, 7))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
if (lv_is_origin(lv)) if (lv_is_origin(lv))
field->report_string[0] = 'o'; repstr[0] = 'o';
else if (find_cow(lv)) else if (find_cow(lv))
field->report_string[0] = 's'; repstr[0] = 's';
else else
field->report_string[0] = '-'; repstr[0] = '-';
if (lv->status & LVM_WRITE) if (lv->status & LVM_WRITE)
field->report_string[1] = 'w'; repstr[1] = 'w';
else else
field->report_string[1] = 'r'; repstr[1] = 'r';
if (lv->alloc == ALLOC_CONTIGUOUS) if (lv->alloc == ALLOC_CONTIGUOUS)
field->report_string[2] = 'c'; repstr[2] = 'c';
else else
field->report_string[2] = 'n'; repstr[2] = 'n';
if (lv->status & FIXED_MINOR) if (lv->status & FIXED_MINOR)
field->report_string[3] = 'm'; /* Fixed Minor */ repstr[3] = 'm'; /* Fixed Minor */
else else
field->report_string[3] = '-'; repstr[3] = '-';
if (lv_info(lv, &info) && info.exists) { if (lv_info(lv, &info) && info.exists) {
if (info.suspended) if (info.suspended)
field->report_string[4] = 's'; /* Suspended */ repstr[4] = 's'; /* Suspended */
else else
field->report_string[4] = 'a'; /* Active */ repstr[4] = 'a'; /* Active */
if (info.open_count) if (info.open_count)
field->report_string[5] = 'o'; /* Open */ repstr[5] = 'o'; /* Open */
else else
field->report_string[5] = '-'; repstr[5] = '-';
} else { } else {
field->report_string[4] = '-'; repstr[4] = '-';
field->report_string[5] = '-'; repstr[5] = '-';
} }
field->sort_value = (void *) field->report_string; field->report_string = repstr;
field->sort_value = (const void *) field->report_string;
return 1; return 1;
} }
@ -211,24 +216,26 @@ static int _lvstatus_disp(struct report_handle *rh, struct field *field,
static int _pvstatus_disp(struct report_handle *rh, struct field *field, static int _pvstatus_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
uint32_t status = *(uint32_t *) data; const uint32_t status = *(const uint32_t *) data;
char *repstr;
if (!(field->report_string = pool_zalloc(rh->mem, 4))) { if (!(repstr = pool_zalloc(rh->mem, 4))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
if (status & ALLOCATABLE_PV) if (status & ALLOCATABLE_PV)
field->report_string[0] = 'a'; repstr[0] = 'a';
else else
field->report_string[0] = '-'; repstr[0] = '-';
if (status & EXPORTED_VG) if (status & EXPORTED_VG)
field->report_string[1] = 'x'; repstr[1] = 'x';
else else
field->report_string[1] = '-'; repstr[1] = '-';
field->sort_value = (void *) field->report_string; field->report_string = repstr;
field->sort_value = (const void *) field->report_string;
return 1; return 1;
} }
@ -236,34 +243,36 @@ static int _pvstatus_disp(struct report_handle *rh, struct field *field,
static int _vgstatus_disp(struct report_handle *rh, struct field *field, static int _vgstatus_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
uint32_t status = *(uint32_t *) data; const uint32_t status = *(const uint32_t *) data;
char *repstr;
if (!(field->report_string = pool_zalloc(rh->mem, 5))) { if (!(repstr = pool_zalloc(rh->mem, 5))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
if (status & LVM_WRITE) if (status & LVM_WRITE)
field->report_string[0] = 'w'; repstr[0] = 'w';
else else
field->report_string[0] = 'r'; repstr[0] = 'r';
if (status & RESIZEABLE_VG) if (status & RESIZEABLE_VG)
field->report_string[1] = 'z'; repstr[1] = 'z';
else else
field->report_string[1] = '-'; repstr[1] = '-';
if (status & EXPORTED_VG) if (status & EXPORTED_VG)
field->report_string[2] = 'x'; repstr[2] = 'x';
else else
field->report_string[2] = '-'; repstr[2] = '-';
if (status & PARTIAL_VG) if (status & PARTIAL_VG)
field->report_string[3] = 'p'; repstr[3] = 'p';
else else
field->report_string[3] = '-'; repstr[3] = '-';
field->sort_value = (void *) field->report_string; field->report_string = repstr;
field->sort_value = (const void *) field->report_string;
return 1; return 1;
} }
@ -271,13 +280,13 @@ static int _vgstatus_disp(struct report_handle *rh, struct field *field,
static int _segtype_disp(struct report_handle *rh, struct field *field, static int _segtype_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct lv_segment *seg = (struct lv_segment *) data; const struct lv_segment *seg = (const struct lv_segment *) data;
if (seg->stripes == 1) if (seg->stripes == 1)
field->report_string = "linear"; field->report_string = "linear";
else else
field->report_string = (char *) get_segtype_string(seg->type); field->report_string = get_segtype_string(seg->type);
field->sort_value = (void *) field->report_string; field->sort_value = (const void *) field->report_string;
return 1; return 1;
} }
@ -285,14 +294,14 @@ static int _segtype_disp(struct report_handle *rh, struct field *field,
static int _origin_disp(struct report_handle *rh, struct field *field, static int _origin_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct logical_volume *lv = (struct logical_volume *) data; const struct logical_volume *lv = (const struct logical_volume *) data;
struct snapshot *snap; struct snapshot *snap;
if ((snap = find_cow(lv))) if ((snap = find_cow(lv)))
return _string_disp(rh, field, &snap->origin->name); return _string_disp(rh, field, &snap->origin->name);
field->report_string = ""; field->report_string = "";
field->sort_value = (void *) field->report_string; field->sort_value = (const void *) field->report_string;
return 1; return 1;
} }
@ -300,8 +309,9 @@ static int _origin_disp(struct report_handle *rh, struct field *field,
static int _size32_disp(struct report_handle *rh, struct field *field, static int _size32_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
uint32_t size = *(uint32_t *) data; const uint32_t size = *(const uint32_t *) data;
const char *disp; const char *disp;
uint64_t *sortval;
if (!*(disp = display_size(rh->cmd, (uint64_t) size / 2, SIZE_UNIT))) { if (!*(disp = display_size(rh->cmd, (uint64_t) size / 2, SIZE_UNIT))) {
stack; stack;
@ -313,12 +323,13 @@ static int _size32_disp(struct report_handle *rh, struct field *field,
return 0; return 0;
} }
if (!(field->sort_value = pool_alloc(rh->mem, sizeof(uint64_t)))) { if (!(sortval = pool_alloc(rh->mem, sizeof(uint64_t)))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
*(uint64_t *) field->sort_value = (uint64_t) size; *sortval = (const uint64_t) size;
field->sort_value = (const void *) sortval;
return 1; return 1;
} }
@ -326,8 +337,9 @@ static int _size32_disp(struct report_handle *rh, struct field *field,
static int _size64_disp(struct report_handle *rh, struct field *field, static int _size64_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
uint64_t size = *(uint64_t *) data; const uint64_t size = *(const uint64_t *) data;
const char *disp; const char *disp;
uint64_t *sortval;
if (!*(disp = display_size(rh->cmd, size / 2, SIZE_UNIT))) { if (!*(disp = display_size(rh->cmd, size / 2, SIZE_UNIT))) {
stack; stack;
@ -339,12 +351,13 @@ static int _size64_disp(struct report_handle *rh, struct field *field,
return 0; return 0;
} }
if (!(field->sort_value = pool_alloc(rh->mem, sizeof(uint64_t)))) { if (!(sortval = pool_alloc(rh->mem, sizeof(uint64_t)))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
*(uint64_t *) field->sort_value = size; *sortval = size;
field->sort_value = sortval;
return 1; return 1;
} }
@ -352,7 +365,7 @@ static int _size64_disp(struct report_handle *rh, struct field *field,
static int _vgsize_disp(struct report_handle *rh, struct field *field, static int _vgsize_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct volume_group *vg = (struct volume_group *) data; const struct volume_group *vg = (const struct volume_group *) data;
uint64_t size; uint64_t size;
size = vg->extent_count * vg->extent_size; size = vg->extent_count * vg->extent_size;
@ -363,7 +376,7 @@ static int _vgsize_disp(struct report_handle *rh, struct field *field,
static int _segstart_disp(struct report_handle *rh, struct field *field, static int _segstart_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct lv_segment *seg = (struct lv_segment *) data; const struct lv_segment *seg = (const struct lv_segment *) data;
uint64_t start; uint64_t start;
start = seg->le * seg->lv->vg->extent_size; start = seg->le * seg->lv->vg->extent_size;
@ -374,7 +387,7 @@ static int _segstart_disp(struct report_handle *rh, struct field *field,
static int _segsize_disp(struct report_handle *rh, struct field *field, static int _segsize_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct lv_segment *seg = (struct lv_segment *) data; const struct lv_segment *seg = (const struct lv_segment *) data;
uint64_t size; uint64_t size;
size = seg->len * seg->lv->vg->extent_size; size = seg->len * seg->lv->vg->extent_size;
@ -385,7 +398,8 @@ static int _segsize_disp(struct report_handle *rh, struct field *field,
static int _pvused_disp(struct report_handle *rh, struct field *field, static int _pvused_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct physical_volume *pv = (struct physical_volume *) data; const struct physical_volume *pv =
(const struct physical_volume *) data;
uint64_t used; uint64_t used;
if (!pv->pe_count) if (!pv->pe_count)
@ -399,21 +413,23 @@ static int _pvused_disp(struct report_handle *rh, struct field *field,
static int _pvfree_disp(struct report_handle *rh, struct field *field, static int _pvfree_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct physical_volume *pv = (struct physical_volume *) data; const struct physical_volume *pv =
uint64_t free; (const struct physical_volume *) data;
uint64_t freespace;
if (!pv->pe_count) if (!pv->pe_count)
free = pv->size; freespace = pv->size;
else else
free = (pv->pe_count - pv->pe_alloc_count) * pv->pe_size; freespace = (pv->pe_count - pv->pe_alloc_count) * pv->pe_size;
return _size64_disp(rh, field, &free); return _size64_disp(rh, field, &freespace);
} }
static int _pvsize_disp(struct report_handle *rh, struct field *field, static int _pvsize_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct physical_volume *pv = (struct physical_volume *) data; const struct physical_volume *pv =
(const struct physical_volume *) data;
uint64_t size; uint64_t size;
if (!pv->pe_count) if (!pv->pe_count)
@ -427,28 +443,31 @@ static int _pvsize_disp(struct report_handle *rh, struct field *field,
static int _vgfree_disp(struct report_handle *rh, struct field *field, static int _vgfree_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct volume_group *vg = (struct volume_group *) data; const struct volume_group *vg = (const struct volume_group *) data;
uint64_t free; uint64_t freespace;
free = vg->free_count * vg->extent_size; freespace = vg->free_count * vg->extent_size;
return _size64_disp(rh, field, &free); return _size64_disp(rh, field, &freespace);
} }
static int _uuid_disp(struct report_handle *rh, struct field *field, static int _uuid_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
char *repstr = NULL;
if (!(field->report_string = pool_alloc(rh->mem, 40))) { if (!(field->report_string = pool_alloc(rh->mem, 40))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
if (!id_write_format((struct id *) data, field->report_string, 40)) { if (!id_write_format((const struct id *) data, repstr, 40)) {
stack; stack;
return 0; return 0;
} }
field->sort_value = (void *) field->report_string; field->report_string = repstr;
field->sort_value = (const void *) field->report_string;
return 1; return 1;
} }
@ -456,57 +475,65 @@ static int _uuid_disp(struct report_handle *rh, struct field *field,
static int _uint32_disp(struct report_handle *rh, struct field *field, static int _uint32_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
uint32_t value = *(uint32_t *) data; const uint32_t value = *(const uint32_t *) data;
uint64_t *sortval;
char *repstr;
if (!(field->report_string = pool_zalloc(rh->mem, 12))) { if (!(repstr = pool_zalloc(rh->mem, 12))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
if (!(field->sort_value = pool_alloc(rh->mem, sizeof(uint64_t)))) { if (!(sortval = pool_alloc(rh->mem, sizeof(uint64_t)))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
*(uint64_t *) field->sort_value = value; if (lvm_snprintf(repstr, 11, "%u", value) < 0) {
if (lvm_snprintf(field->report_string, 11, "%u", value) < 0) {
log_error("uint32 too big: %u", value); log_error("uint32 too big: %u", value);
return 0; return 0;
} }
*sortval = (const uint64_t) value;
field->sort_value = sortval;
field->report_string = repstr;
return 1; return 1;
} }
static int _int32_disp(struct report_handle *rh, struct field *field, static int _int32_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
int32_t value = *(int32_t *) data; const int32_t value = *(const int32_t *) data;
uint64_t *sortval;
char *repstr;
if (!(field->report_string = pool_zalloc(rh->mem, 13))) { if (!(repstr = pool_zalloc(rh->mem, 13))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
if (!(field->sort_value = pool_alloc(rh->mem, sizeof(int64_t)))) { if (!(sortval = pool_alloc(rh->mem, sizeof(int64_t)))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
*(int64_t *) field->sort_value = value; if (lvm_snprintf(repstr, 12, "%d", value) < 0) {
if (lvm_snprintf(field->report_string, 12, "%d", value) < 0) {
log_error("int32 too big: %d", value); log_error("int32 too big: %d", value);
return 0; return 0;
} }
*sortval = (const uint64_t) value;
field->sort_value = sortval;
field->report_string = repstr;
return 1; return 1;
} }
static int _lvsegcount_disp(struct report_handle *rh, struct field *field, static int _lvsegcount_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct logical_volume *lv = (struct logical_volume *) data; const struct logical_volume *lv = (const struct logical_volume *) data;
uint32_t count; uint32_t count;
count = list_size(&lv->segments); count = list_size(&lv->segments);
@ -517,11 +544,13 @@ static int _lvsegcount_disp(struct report_handle *rh, struct field *field,
static int _snpercent_disp(struct report_handle *rh, struct field *field, static int _snpercent_disp(struct report_handle *rh, struct field *field,
const void *data) const void *data)
{ {
struct logical_volume *lv = (struct logical_volume *) data; const struct logical_volume *lv = (const struct logical_volume *) data;
struct snapshot *snap; struct snapshot *snap;
float snap_percent; float snap_percent;
uint64_t *sortval;
char *repstr;
if (!(field->sort_value = pool_alloc(rh->mem, sizeof(uint64_t)))) { if (!(sortval = pool_alloc(rh->mem, sizeof(uint64_t)))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
@ -529,11 +558,12 @@ static int _snpercent_disp(struct report_handle *rh, struct field *field,
if (!(snap = find_cow(lv)) if (!(snap = find_cow(lv))
|| !lv_snapshot_percent(snap->cow, &snap_percent)) { || !lv_snapshot_percent(snap->cow, &snap_percent)) {
field->report_string = ""; field->report_string = "";
*(uint64_t *) field->sort_value = 0LL; *sortval = __UINT64_C(0);
field->sort_value = sortval;
return 1; return 1;
} }
if (!(field->report_string = pool_zalloc(rh->mem, 8))) { if (!(repstr = pool_zalloc(rh->mem, 8))) {
log_error("pool_alloc failed"); log_error("pool_alloc failed");
return 0; return 0;
} }
@ -541,13 +571,15 @@ static int _snpercent_disp(struct report_handle *rh, struct field *field,
if (snap_percent == -1) if (snap_percent == -1)
snap_percent = 100; snap_percent = 100;
*(uint64_t *) field->sort_value = snap_percent * 1000; if (lvm_snprintf(repstr, 7, "%.2f", snap_percent) < 0) {
if (lvm_snprintf(field->report_string, 7, "%.2f", snap_percent) < 0) {
log_error("snapshot percentage too large"); log_error("snapshot percentage too large");
return 0; return 0;
} }
*sortval = snap_percent * __UINT64_C(1000);
field->sort_value = sortval;
field->report_string = repstr;
return 1; return 1;
} }
@ -575,12 +607,12 @@ static struct {
#undef NUM #undef NUM
#undef FIELD #undef FIELD
const int _num_fields = sizeof(_fields) / sizeof(_fields[0]); const unsigned int _num_fields = sizeof(_fields) / sizeof(_fields[0]);
/* /*
* Initialise report handle * Initialise report handle
*/ */
static int _field_match(struct report_handle *rh, const char *field, int len) static int _field_match(struct report_handle *rh, const char *field, size_t len)
{ {
uint32_t f, l; uint32_t f, l;
struct field_properties *fp; struct field_properties *fp;
@ -635,33 +667,33 @@ static int _add_sort_key(struct report_handle *rh, uint32_t field_num,
if (!found) { if (!found) {
/* Add as a non-display field */ /* Add as a non-display field */
if (!(fp = pool_zalloc(rh->mem, sizeof(*fp)))) { if (!(found = pool_zalloc(rh->mem, sizeof(*found)))) {
log_error("struct field_properties allocation failed"); log_error("struct field_properties allocation failed");
return 0; return 0;
} }
rh->type |= _fields[field_num].type; rh->type |= _fields[field_num].type;
fp->field_num = field_num; found->field_num = field_num;
fp->width = _fields[field_num].width; found->width = _fields[field_num].width;
fp->flags = _fields[field_num].flags | FLD_HIDDEN; found->flags = _fields[field_num].flags | FLD_HIDDEN;
list_add(&rh->field_props, &fp->list); list_add(&rh->field_props, &found->list);
} }
if (fp->flags & FLD_SORT_KEY) { if (found->flags & FLD_SORT_KEY) {
log_error("Ignoring duplicate sort field: %s", log_error("Ignoring duplicate sort field: %s",
_fields[field_num].id); _fields[field_num].id);
return 1; return 1;
} }
fp->flags |= FLD_SORT_KEY; found->flags |= FLD_SORT_KEY;
fp->sort_posn = rh->keys_count++; found->sort_posn = rh->keys_count++;
fp->flags |= flags; found->flags |= flags;
return 1; return 1;
} }
static int _key_match(struct report_handle *rh, const char *key, int len) static int _key_match(struct report_handle *rh, const char *key, size_t len)
{ {
uint32_t f, l; uint32_t f, l;
uint32_t flags = 0; uint32_t flags = 0;
@ -711,7 +743,7 @@ static int _parse_options(struct report_handle *rh, const char *format)
ws = we; ws = we;
while (*we && *we != ',') while (*we && *we != ',')
we++; we++;
if (!_field_match(rh, ws, we - ws)) { if (!_field_match(rh, ws, (size_t) (we - ws))) {
log_error("Unrecognised field: %.*s", we - ws, ws); log_error("Unrecognised field: %.*s", we - ws, ws);
return 0; return 0;
} }
@ -732,7 +764,7 @@ static int _parse_keys(struct report_handle *rh, const char *keys)
ws = we; ws = we;
while (*we && *we != ',') while (*we && *we != ',')
we++; we++;
if (!_key_match(rh, ws, we - ws)) { if (!_key_match(rh, ws, (size_t) (we - ws))) {
log_error("Unrecognised field: %.*s", we - ws, ws); log_error("Unrecognised field: %.*s", we - ws, ws);
return 0; return 0;
} }
@ -837,7 +869,7 @@ int report_object(void *handle, struct volume_group *vg,
struct field_properties *fp; struct field_properties *fp;
struct row *row; struct row *row;
struct field *field; struct field *field;
void *data; void *data = NULL;
if (lv && pv) { if (lv && pv) {
log_error("report_object: One of *lv and *pv must be NULL!"); log_error("report_object: One of *lv and *pv must be NULL!");
@ -910,7 +942,7 @@ int report_object(void *handle, struct volume_group *vg,
/* /*
* Print row of headings * Print row of headings
*/ */
int report_headings(void *handle) static int _report_headings(void *handle)
{ {
struct report_handle *rh = handle; struct report_handle *rh = handle;
struct list *fh; struct list *fh;
@ -948,17 +980,19 @@ int report_headings(void *handle)
*/ */
static int _row_compare(const void *a, const void *b) static int _row_compare(const void *a, const void *b)
{ {
struct row *rowa = *(struct row **) a; const struct row *rowa = *(const struct row **) a;
struct row *rowb = *(struct row **) b; const struct row *rowb = *(const struct row **) b;
struct field *sfa, *sfb; const struct field *sfa, *sfb;
int32_t cnt = -1; int32_t cnt = -1;
for (cnt = 0; cnt < rowa->rh->keys_count; cnt++) { for (cnt = 0; cnt < rowa->rh->keys_count; cnt++) {
sfa = (*rowa->sort_fields)[cnt]; sfa = (*rowa->sort_fields)[cnt];
sfb = (*rowb->sort_fields)[cnt]; sfb = (*rowb->sort_fields)[cnt];
if (sfa->props->flags & FLD_NUMBER) { if (sfa->props->flags & FLD_NUMBER) {
uint64_t numa = *(uint64_t *) sfa->sort_value; const uint64_t numa =
uint64_t numb = *(uint64_t *) sfb->sort_value; *(const uint64_t *) sfa->sort_value;
const uint64_t numb =
*(const uint64_t *) sfb->sort_value;
if (numa == numb) if (numa == numb)
continue; continue;
@ -969,8 +1003,8 @@ static int _row_compare(const void *a, const void *b)
return (numa < numb) ? 1 : -1; return (numa < numb) ? 1 : -1;
} }
} else { /* FLD_STRING */ } else { /* FLD_STRING */
char *stra = (char *) sfa->sort_value; const char *stra = (const char *) sfa->sort_value;
char *strb = (char *) sfb->sort_value; const char *strb = (const char *) sfb->sort_value;
int cmp = strcmp(stra, strb); int cmp = strcmp(stra, strb);
if (!cmp) if (!cmp)
@ -1033,7 +1067,7 @@ int report_output(void *handle)
/* If headings not printed yet, calculate field widths and print them */ /* If headings not printed yet, calculate field widths and print them */
if (!(rh->flags & RH_HEADINGS_PRINTED)) if (!(rh->flags & RH_HEADINGS_PRINTED))
report_headings(rh); _report_headings(rh);
/* Print and clear buffer */ /* Print and clear buffer */
list_iterate_safe(rowh, rtmp, &rh->rows) { list_iterate_safe(rowh, rtmp, &rh->rows) {

View File

@ -10,7 +10,6 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <assert.h>
static unsigned char _c[] = static unsigned char _c[] =
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
@ -26,7 +25,7 @@ int lvid_create(union lvid *lvid, struct id *vgid)
return 1; return 1;
} }
int lvid_from_lvnum(union lvid *lvid, struct id *vgid, int lv_num) int lvid_from_lvnum(union lvid *lvid, struct id *vgid, uint32_t lv_num)
{ {
int i; int i;
@ -58,20 +57,21 @@ int lvnum_from_lvid(union lvid *lvid)
int id_create(struct id *id) int id_create(struct id *id)
{ {
int random, i, len = sizeof(id->uuid); int randomfile, i;
size_t len = sizeof(id->uuid);
memset(id->uuid, 0, len); memset(id->uuid, 0, len);
if ((random = open("/dev/urandom", O_RDONLY)) < 0) { if ((randomfile = open("/dev/urandom", O_RDONLY)) < 0) {
log_sys_error("open", "id_create"); log_sys_error("open", "id_create");
return 0; return 0;
} }
if (read(random, id->uuid, len) != len) { if (read(randomfile, id->uuid, len) != len) {
log_sys_error("read", "id_create"); log_sys_error("read", "id_create");
close(random); close(randomfile);
return 0; return 0;
} }
close(random); close(randomfile);
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
id->uuid[i] = _c[id->uuid[i] % (sizeof(_c) - 1)]; id->uuid[i] = _c[id->uuid[i] % (sizeof(_c) - 1)];
@ -84,7 +84,7 @@ int id_create(struct id *id)
* the uuid just contains characters from * the uuid just contains characters from
* '_c'. A checksum would have been nice :( * '_c'. A checksum would have been nice :(
*/ */
void _build_inverse(void) static void _build_inverse(void)
{ {
char *ptr; char *ptr;
@ -112,18 +112,18 @@ int id_valid(struct id *id)
return 1; return 1;
} }
int id_equal(struct id *lhs, struct id *rhs) int id_equal(const struct id *lhs, const struct id *rhs)
{ {
return !memcmp(lhs->uuid, rhs->uuid, sizeof(lhs->uuid)); return !memcmp(lhs->uuid, rhs->uuid, sizeof(lhs->uuid));
} }
#define GROUPS (ID_LEN / 4) #define GROUPS (ID_LEN / 4)
int id_write_format(struct id *id, char *buffer, size_t size) int id_write_format(const struct id *id, char *buffer, size_t size)
{ {
int i, tot; int i, tot;
static int group_size[] = { 6, 4, 4, 4, 4, 4, 6 }; static unsigned group_size[] = { 6, 4, 4, 4, 4, 4, 6 };
assert(ID_LEN == 32); assert(ID_LEN == 32);
@ -144,7 +144,7 @@ int id_write_format(struct id *id, char *buffer, size_t size)
return 1; return 1;
} }
int id_read_format(struct id *id, char *buffer) int id_read_format(struct id *id, const char *buffer)
{ {
int out = 0; int out = 0;

View File

@ -25,23 +25,23 @@ union lvid {
char s[2 * sizeof(struct id) + 1]; char s[2 * sizeof(struct id) + 1];
}; };
int lvid_from_lvnum(union lvid *lvid, struct id *vgid, int lv_num); int lvid_from_lvnum(union lvid *lvid, struct id *vgid, uint32_t lv_num);
int lvnum_from_lvid(union lvid *lvid); int lvnum_from_lvid(union lvid *lvid);
int lvid_create(union lvid *lvid, struct id *vgid); int lvid_create(union lvid *lvid, struct id *vgid);
int id_create(struct id *id); int id_create(struct id *id);
int id_valid(struct id *id); int id_valid(struct id *id);
int id_equal(struct id *lhs, struct id *rhs); int id_equal(const struct id *lhs, const struct id *rhs);
/* /*
* Fills 'buffer' with a more human readable form * Fills 'buffer' with a more human readable form
* of the uuid. * of the uuid.
*/ */
int id_write_format(struct id *id, char *buffer, size_t size); int id_write_format(const struct id *id, char *buffer, size_t size);
/* /*
* Reads a formatted uuid. * Reads a formatted uuid.
*/ */
int id_read_format(struct id *id, char *buffer); int id_read_format(struct id *id, const char *buffer);
#endif #endif

View File

@ -7,8 +7,6 @@
#ifndef _LVM_LIST_H #ifndef _LVM_LIST_H
#define _LVM_LIST_H #define _LVM_LIST_H
#include <assert.h>
struct list { struct list {
struct list *n, *p; struct list *n, *p;
}; };
@ -62,10 +60,10 @@ static inline int list_end(struct list *head, struct list *elem)
#define list_iterate_safe(v, t, head) \ #define list_iterate_safe(v, t, head) \
for (v = (head)->n, t = v->n; v != head; v = t, t = v->n) for (v = (head)->n, t = v->n; v != head; v = t, t = v->n)
static inline int list_size(struct list *head) static inline unsigned int list_size(const struct list *head)
{ {
int s = 0; unsigned int s = 0;
struct list *v; const struct list *v;
list_iterate(v, head) list_iterate(v, head)
s++; s++;

View File

@ -50,17 +50,22 @@ endif
SUFFIXES= SUFFIXES=
SUFFIXES=.c .d .o .so SUFFIXES=.c .d .o .so
CFLAGS+=-Wall CFLAGS+=-fPIC -Wall -Wundef -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline
#CFLAGS+=-O2
CFLAGS+=-g -fno-omit-frame-pointer #CFLAGS+=-W -Wconversion -Wpointer-arith -Wredundant-decls -Wbad-function-cast -Wcast-qual -Wmissing-noreturn
ifeq ("@DEBUG@", "yes")
CFLAGS+=-g -fno-omit-frame-pointer -DDEBUG_MEM -DDEBUG
else
CFLAGS+=-O2
endif
#CFLAGS+=-DDEBUG_POOL
#CFLAGS+=-DBOUNDS_CHECK
#CFLAGS+=-pg #CFLAGS+=-pg
#LD_FLAGS=-pg #LD_FLAGS=-pg
CFLAGS+=-DDEBUG_MEM -DDEBUG
#CFLAGS+=-DDEBUG_POOL
#CFLAGS+=-DBOUNDS_CHECK
LIB_VERSION := $(shell cat $(top_srcdir)/VERSION | \ LIB_VERSION := $(shell cat $(top_srcdir)/VERSION | \
awk -F '.' '{printf "%s.%s",$$1,$$2}') awk -F '.' '{printf "%s.%s",$$1,$$2}')

View File

@ -204,7 +204,7 @@ int backup_remove(const char *vg_name)
struct volume_group *backup_read_vg(struct cmd_context *cmd, struct volume_group *backup_read_vg(struct cmd_context *cmd,
const char *vg_name, const char *file) const char *vg_name, const char *file)
{ {
struct volume_group *vg; struct volume_group *vg = NULL;
struct format_instance *tf; struct format_instance *tf;
struct list *mdah; struct list *mdah;
struct metadata_area *mda; struct metadata_area *mda;
@ -262,8 +262,8 @@ int backup_restore_vg(struct cmd_context *cmd, struct volume_group *vg)
return 0; return 0;
} }
if (!vg->fid->fmt->ops-> if (!vg->fid->fmt->ops->
pv_setup(vg->fid->fmt, 0, 0, 0, 0, 0, pv_setup(vg->fid->fmt, __UINT64_C(0), 0, 0, 0,
&vg->fid->metadata_areas, pv, vg)) { __UINT64_C(0), &vg->fid->metadata_areas, pv, vg)) {
log_error("Format-specific setup for %s failed", log_error("Format-specific setup for %s failed",
dev_name(pv->dev)); dev_name(pv->dev));
return 0; return 0;
@ -310,7 +310,7 @@ int backup_restore(struct cmd_context *cmd, const char *vg_name)
int backup_to_file(const char *file, const char *desc, struct volume_group *vg) int backup_to_file(const char *file, const char *desc, struct volume_group *vg)
{ {
int r; int r = 0;
struct format_instance *tf; struct format_instance *tf;
struct list *mdah; struct list *mdah;
struct metadata_area *mda; struct metadata_area *mda;

View File

@ -23,9 +23,9 @@
static int lvchange_permission(struct cmd_context *cmd, static int lvchange_permission(struct cmd_context *cmd,
struct logical_volume *lv) struct logical_volume *lv)
{ {
int lv_access; uint32_t lv_access;
lv_access = arg_int_value(cmd, permission_ARG, 0); lv_access = arg_uint_value(cmd, permission_ARG, 0);
if ((lv_access & LVM_WRITE) && (lv->status & LVM_WRITE)) { if ((lv_access & LVM_WRITE) && (lv->status & LVM_WRITE)) {
log_error("Logical volume \"%s\" is already writable", log_error("Logical volume \"%s\" is already writable",
@ -162,9 +162,9 @@ static int lvchange_contiguous(struct cmd_context *cmd,
static int lvchange_readahead(struct cmd_context *cmd, static int lvchange_readahead(struct cmd_context *cmd,
struct logical_volume *lv) struct logical_volume *lv)
{ {
int read_ahead = 0; unsigned int read_ahead = 0;
read_ahead = arg_int_value(cmd, readahead_ARG, 0); read_ahead = arg_uint_value(cmd, readahead_ARG, 0);
/******* FIXME Ranges? /******* FIXME Ranges?
if (read_ahead < LVM_MIN_READ_AHEAD || read_ahead > LVM_MAX_READ_AHEAD) { if (read_ahead < LVM_MIN_READ_AHEAD || read_ahead > LVM_MAX_READ_AHEAD) {

View File

@ -17,8 +17,8 @@ struct lvcreate_params {
int minor; int minor;
char *origin; char *origin;
char *vg_name; const char *vg_name;
char *lv_name; const char *lv_name;
uint32_t stripes; uint32_t stripes;
uint32_t stripe_size; uint32_t stripe_size;
@ -140,11 +140,11 @@ static int _read_size_params(struct lvcreate_params *lp,
} }
if (arg_count(cmd, extents_ARG)) if (arg_count(cmd, extents_ARG))
lp->extents = arg_int_value(cmd, extents_ARG, 0); lp->extents = arg_uint_value(cmd, extents_ARG, 0);
/* Size returned in kilobyte units; held in sectors */ /* Size returned in kilobyte units; held in sectors */
if (arg_count(cmd, size_ARG)) if (arg_count(cmd, size_ARG))
lp->size = arg_uint64_value(cmd, size_ARG, 0) * 2ull; lp->size = arg_uint64_value(cmd, size_ARG, __UINT64_C(0)) * 2;
return 1; return 1;
} }
@ -158,13 +158,13 @@ static int _read_stripe_params(struct lvcreate_params *lp,
lp->stripes = 1; lp->stripes = 1;
if (arg_count(cmd, stripes_ARG)) { if (arg_count(cmd, stripes_ARG)) {
lp->stripes = arg_int_value(cmd, stripes_ARG, 1); lp->stripes = arg_uint_value(cmd, stripes_ARG, 1);
if (lp->stripes == 1) if (lp->stripes == 1)
log_print("Redundant stripes argument: default is 1"); log_print("Redundant stripes argument: default is 1");
} }
if (arg_count(cmd, stripesize_ARG)) if (arg_count(cmd, stripesize_ARG))
lp->stripe_size = 2 * arg_int_value(cmd, stripesize_ARG, 0); lp->stripe_size = 2 * arg_uint_value(cmd, stripesize_ARG, 0);
if (lp->stripes == 1 && lp->stripe_size) { if (lp->stripes == 1 && lp->stripe_size) {
log_print("Ignoring stripesize argument with single stripe"); log_print("Ignoring stripesize argument with single stripe");
@ -172,7 +172,9 @@ static int _read_stripe_params(struct lvcreate_params *lp,
} }
if (lp->stripes > 1 && !lp->stripe_size) { if (lp->stripes > 1 && !lp->stripe_size) {
lp->stripe_size = 2 * STRIPE_SIZE_DEFAULT; lp->stripe_size = find_config_int(cmd->cf->root,
"metadata/stripesize", '/',
DEFAULT_STRIPESIZE) * 2;
log_print("Using default stripesize %dKB", lp->stripe_size / 2); log_print("Using default stripesize %dKB", lp->stripe_size / 2);
} }
@ -211,7 +213,7 @@ static int _read_params(struct lvcreate_params *lp, struct cmd_context *cmd,
log_error("-s and -Z are incompatible"); log_error("-s and -Z are incompatible");
return 0; return 0;
} }
lp->chunk_size = 2 * arg_int_value(cmd, chunksize_ARG, 8); lp->chunk_size = 2 * arg_uint_value(cmd, chunksize_ARG, 8);
log_verbose("Setting chunksize to %d sectors.", lp->chunk_size); log_verbose("Setting chunksize to %d sectors.", lp->chunk_size);
} else { } else {
if (arg_count(cmd, chunksize_ARG)) { if (arg_count(cmd, chunksize_ARG)) {
@ -239,13 +241,13 @@ static int _read_params(struct lvcreate_params *lp, struct cmd_context *cmd,
* Read ahead. * Read ahead.
*/ */
if (arg_count(cmd, readahead_ARG)) if (arg_count(cmd, readahead_ARG))
lp->read_ahead = arg_int_value(cmd, readahead_ARG, 0); lp->read_ahead = arg_uint_value(cmd, readahead_ARG, 0);
/* /*
* Permissions. * Permissions.
*/ */
if (arg_count(cmd, permission_ARG)) if (arg_count(cmd, permission_ARG))
lp->permission = arg_int_value(cmd, permission_ARG, 0); lp->permission = arg_uint_value(cmd, permission_ARG, 0);
else else
lp->permission = LVM_READ | LVM_WRITE; lp->permission = LVM_READ | LVM_WRITE;
@ -309,7 +311,7 @@ static int _zero_lv(struct cmd_context *cmd, struct logical_volume *lv)
if (!(dev_open(dev, O_WRONLY))) if (!(dev_open(dev, O_WRONLY)))
return 0; return 0;
dev_zero(dev, 0, 4096); dev_zero(dev, __UINT64_C(0), (size_t) 4096);
dev_close(dev); dev_close(dev);
return 1; return 1;
@ -321,7 +323,7 @@ static int _lvcreate(struct cmd_context *cmd, struct lvcreate_params *lp)
uint32_t status = 0; uint32_t status = 0;
alloc_policy_t alloc = ALLOC_DEFAULT; alloc_policy_t alloc = ALLOC_DEFAULT;
struct volume_group *vg; struct volume_group *vg;
struct logical_volume *lv, *org; struct logical_volume *lv, *org = NULL;
struct list *pvh; struct list *pvh;
int consistent = 1; int consistent = 1;
@ -381,7 +383,7 @@ static int _lvcreate(struct cmd_context *cmd, struct lvcreate_params *lp)
lp->extents += vg->extent_size - lp->extents % lp->extents += vg->extent_size - lp->extents %
vg->extent_size; vg->extent_size;
log_print("Rounding up size to full physical extent %s", log_print("Rounding up size to full physical extent %s",
display_size(cmd, lp->extents / 2, display_size(cmd, (uint64_t) lp->extents / 2,
SIZE_SHORT)); SIZE_SHORT));
} }

View File

@ -20,7 +20,7 @@
#include "tools.h" #include "tools.h"
int lvdisplay_single(struct cmd_context *cmd, struct logical_volume *lv, static int _lvdisplay_single(struct cmd_context *cmd, struct logical_volume *lv,
void *handle) void *handle)
{ {
if (arg_count(cmd, colon_ARG)) if (arg_count(cmd, colon_ARG))
@ -57,5 +57,5 @@ int lvdisplay(struct cmd_context *cmd, int argc, char **argv)
} }
return process_each_lv(cmd, argc, argv, LCK_VG_READ, NULL, return process_each_lv(cmd, argc, argv, LCK_VG_READ, NULL,
&lvdisplay_single); &_lvdisplay_single);
} }

View File

@ -5,13 +5,11 @@
*/ */
#include "tools.h" #include "tools.h"
#include "defaults.h"
#include "label.h" #include "label.h"
#include "version.h" #include "version.h"
#include "stub.h" #include "stub.h"
#include <assert.h>
#include <getopt.h> #include <getopt.h>
#include <signal.h> #include <signal.h>
#include <syslog.h> #include <syslog.h>
@ -32,7 +30,7 @@
*/ */
struct arg the_args[ARG_COUNT + 1] = { struct arg the_args[ARG_COUNT + 1] = {
#define arg(a, b, c, d) {b, "--" c, d, 0, NULL}, #define arg(a, b, c, d) {b, "--" c, d, 0, NULL, 0, 0, __INT64_C(0), __UINT64_C(0), 0, NULL},
#include "args.h" #include "args.h"
#undef arg #undef arg
@ -48,11 +46,15 @@ int yes_no_arg(struct cmd_context *cmd, struct arg *a)
{ {
a->sign = SIGN_NONE; a->sign = SIGN_NONE;
if (!strcmp(a->value, "y")) if (!strcmp(a->value, "y")) {
a->i_value = 1; a->i_value = 1;
a->ui_value = 1;
}
else if (!strcmp(a->value, "n")) else if (!strcmp(a->value, "n")) {
a->i_value = 0; a->i_value = 0;
a->ui_value = 0;
}
else else
return 0; return 0;
@ -82,7 +84,7 @@ int metadatatype_arg(struct cmd_context *cmd, struct arg *a)
return 0; return 0;
} }
int _get_int_arg(struct arg *a, char **ptr) static int _get_int_arg(struct arg *a, char **ptr)
{ {
char *val; char *val;
long v; long v;
@ -109,7 +111,9 @@ int _get_int_arg(struct arg *a, char **ptr)
if (*ptr == val) if (*ptr == val)
return 0; return 0;
a->i_value = (uint32_t) v; a->i_value = (int32_t) v;
a->ui_value = (uint32_t) v;
return 1; return 1;
} }
@ -117,7 +121,7 @@ static int _size_arg(struct cmd_context *cmd, struct arg *a, int factor)
{ {
char *ptr; char *ptr;
int i; int i;
static char *suffixes = "kmgt"; static const char *suffixes = "kmgt";
char *val; char *val;
double v; double v;
@ -156,7 +160,8 @@ static int _size_arg(struct cmd_context *cmd, struct arg *a, int factor)
} else } else
v *= factor; v *= factor;
a->i_value = (uint32_t) v; a->i_value = (int32_t) v;
a->ui_value = (uint32_t) v;
a->i64_value = (int64_t) v; a->i64_value = (int64_t) v;
a->ui64_value = (uint64_t) v; a->ui64_value = (uint64_t) v;
@ -218,10 +223,10 @@ int permission_arg(struct cmd_context *cmd, struct arg *a)
a->sign = SIGN_NONE; a->sign = SIGN_NONE;
if ((!strcmp(a->value, "rw")) || (!strcmp(a->value, "wr"))) if ((!strcmp(a->value, "rw")) || (!strcmp(a->value, "wr")))
a->i_value = LVM_READ | LVM_WRITE; a->ui_value = LVM_READ | LVM_WRITE;
else if (!strcmp(a->value, "r")) else if (!strcmp(a->value, "r"))
a->i_value = LVM_READ; a->ui_value = LVM_READ;
else else
return 0; return 0;
@ -268,7 +273,7 @@ static void _alloc_command(void)
} }
static void _create_new_command(const char *name, command_fn command, static void _create_new_command(const char *name, command_fn command,
const char *desc, const char *usage, const char *desc, const char *usagestr,
int nargs, int *args) int nargs, int *args)
{ {
struct command *nc; struct command *nc;
@ -279,21 +284,21 @@ static void _create_new_command(const char *name, command_fn command,
nc->name = name; nc->name = name;
nc->desc = desc; nc->desc = desc;
nc->usage = usage; nc->usage = usagestr;
nc->fn = command; nc->fn = command;
nc->num_args = nargs; nc->num_args = nargs;
nc->valid_args = args; nc->valid_args = args;
} }
static void _register_command(const char *name, command_fn fn, static void _register_command(const char *name, command_fn fn,
const char *desc, const char *usage, ...) const char *desc, const char *usagestr, ...)
{ {
int nargs = 0, i; int nargs = 0, i;
int *args; int *args;
va_list ap; va_list ap;
/* count how many arguments we have */ /* count how many arguments we have */
va_start(ap, usage); va_start(ap, usagestr);
while (va_arg(ap, int) >= 0) while (va_arg(ap, int) >= 0)
nargs++; nargs++;
va_end(ap); va_end(ap);
@ -305,13 +310,13 @@ static void _register_command(const char *name, command_fn fn,
} }
/* fill them in */ /* fill them in */
va_start(ap, usage); va_start(ap, usagestr);
for (i = 0; i < nargs; i++) for (i = 0; i < nargs; i++)
args[i] = va_arg(ap, int); args[i] = va_arg(ap, int);
va_end(ap); va_end(ap);
/* enter the command in the register */ /* enter the command in the register */
_create_new_command(name, fn, desc, usage, nargs, args); _create_new_command(name, fn, desc, usagestr, nargs, args);
} }
static void _register_commands() static void _register_commands()
@ -346,7 +351,7 @@ static struct command *_find_command(const char *name)
return _commands + i; return _commands + i;
} }
void usage(const char *name) static void _usage(const char *name)
{ {
struct command *com = _find_command(name); struct command *com = _find_command(name);
@ -416,12 +421,15 @@ static int _process_command_line(struct cmd_context *cmd, int *argc,
struct arg *a; struct arg *a;
for (i = 0; i < ARG_COUNT; i++) { for (i = 0; i < ARG_COUNT; i++) {
struct arg *a = the_args + i; a = the_args + i;
/* zero the count and arg */ /* zero the count and arg */
a->count = 0; a->count = 0;
a->value = 0; a->value = 0;
a->i_value = 0; a->i_value = 0;
a->ui_value = 0;
a->i64_value = 0;
a->ui64_value = 0;
} }
/* fill in the short and long opts */ /* fill in the short and long opts */
@ -471,7 +479,8 @@ static int _process_command_line(struct cmd_context *cmd, int *argc,
static int _merge_synonym(struct cmd_context *cmd, int oldarg, int newarg) static int _merge_synonym(struct cmd_context *cmd, int oldarg, int newarg)
{ {
struct arg *old, *new; const struct arg *old;
struct arg *new;
if (arg_count(cmd, oldarg) && arg_count(cmd, newarg)) { if (arg_count(cmd, oldarg) && arg_count(cmd, newarg)) {
log_error("%s and %s are synonyms. Please only supply one.", log_error("%s and %s are synonyms. Please only supply one.",
@ -488,6 +497,9 @@ static int _merge_synonym(struct cmd_context *cmd, int oldarg, int newarg)
new->count = old->count; new->count = old->count;
new->value = old->value; new->value = old->value;
new->i_value = old->i_value; new->i_value = old->i_value;
new->ui_value = old->ui_value;
new->i64_value = old->i64_value;
new->ui64_value = old->ui64_value;
new->sign = old->sign; new->sign = old->sign;
return 1; return 1;
@ -495,13 +507,13 @@ static int _merge_synonym(struct cmd_context *cmd, int oldarg, int newarg)
int version(struct cmd_context *cmd, int argc, char **argv) int version(struct cmd_context *cmd, int argc, char **argv)
{ {
char version[80]; char vsn[80];
log_print("LVM version: %s", LVM_VERSION); log_print("LVM version: %s", LVM_VERSION);
if (library_version(version, sizeof(version))) if (library_version(vsn, sizeof(vsn)))
log_print("Library version: %s", version); log_print("Library version: %s", vsn);
if (driver_version(version, sizeof(version))) if (driver_version(vsn, sizeof(vsn)))
log_print("Driver version: %s", version); log_print("Driver version: %s", vsn);
return ECMD_PROCESSED; return ECMD_PROCESSED;
} }
@ -572,7 +584,7 @@ static int _get_settings(struct cmd_context *cmd)
static int _process_common_commands(struct cmd_context *cmd) static int _process_common_commands(struct cmd_context *cmd)
{ {
if (arg_count(cmd, help_ARG) || arg_count(cmd, help2_ARG)) { if (arg_count(cmd, help_ARG) || arg_count(cmd, help2_ARG)) {
usage(cmd->command->name); _usage(cmd->command->name);
return ECMD_PROCESSED; return ECMD_PROCESSED;
} }
@ -606,7 +618,7 @@ int help(struct cmd_context *cmd, int argc, char **argv)
else { else {
int i; int i;
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
usage(argv[i]); _usage(argv[i]);
} }
return 0; return 0;
@ -646,7 +658,8 @@ static char *_copy_command_line(struct cmd_context *cmd, int argc, char **argv)
goto bad; goto bad;
if (i < (argc - 1)) if (i < (argc - 1))
if (!pool_grow_object(cmd->mem, " ", 1)) ; if (!pool_grow_object(cmd->mem, " ", 1))
goto bad;
} }
/* /*
@ -721,7 +734,7 @@ static int _run_command(struct cmd_context *cmd, int argc, char **argv)
pool_empty(cmd->mem); pool_empty(cmd->mem);
if (ret == EINVALID_CMD_LINE && !_interactive) if (ret == EINVALID_CMD_LINE && !_interactive)
usage(cmd->command->name); _usage(cmd->command->name);
return ret; return ret;
} }
@ -761,7 +774,7 @@ static void _init_rand(void)
static int _init_backup(struct cmd_context *cmd, struct config_tree *cf) static int _init_backup(struct cmd_context *cmd, struct config_tree *cf)
{ {
int days, min; uint32_t days, min;
char default_dir[PATH_MAX]; char default_dir[PATH_MAX];
const char *dir; const char *dir;
@ -777,11 +790,11 @@ static int _init_backup(struct cmd_context *cmd, struct config_tree *cf)
find_config_bool(cmd->cf->root, "backup/archive", '/', find_config_bool(cmd->cf->root, "backup/archive", '/',
DEFAULT_ARCHIVE_ENABLED); DEFAULT_ARCHIVE_ENABLED);
days = find_config_int(cmd->cf->root, "backup/retain_days", '/', days = (uint32_t) find_config_int(cmd->cf->root, "backup/retain_days",
DEFAULT_ARCHIVE_DAYS); '/', DEFAULT_ARCHIVE_DAYS);
min = find_config_int(cmd->cf->root, "backup/retain_min", '/', min = (uint32_t) find_config_int(cmd->cf->root, "backup/retain_min",
DEFAULT_ARCHIVE_NUMBER); '/', DEFAULT_ARCHIVE_NUMBER);
if (lvm_snprintf if (lvm_snprintf
(default_dir, sizeof(default_dir), "%s/%s", cmd->sys_dir, (default_dir, sizeof(default_dir), "%s/%s", cmd->sys_dir,
@ -909,7 +922,7 @@ static int _run_script(struct cmd_context *cmd, int argc, char **argv)
static char *_list_cmds(const char *text, int state) static char *_list_cmds(const char *text, int state)
{ {
static int i = 0; static int i = 0;
static int len = 0; static size_t len = 0;
/* Initialise if this is a new completion attempt */ /* Initialise if this is a new completion attempt */
if (!state) { if (!state) {
@ -928,7 +941,7 @@ static char *_list_cmds(const char *text, int state)
static char *_list_args(const char *text, int state) static char *_list_args(const char *text, int state)
{ {
static int match_no = 0; static int match_no = 0;
static int len = 0; static size_t len = 0;
static struct command *com; static struct command *com;
/* Initialise if this is a new completion attempt */ /* Initialise if this is a new completion attempt */
@ -946,10 +959,10 @@ static char *_list_args(const char *text, int state)
/* Look for word in list of commands */ /* Look for word in list of commands */
for (j = 0; j < _num_commands; j++) { for (j = 0; j < _num_commands; j++) {
char *p; const char *p;
char *q = s; char *q = s;
p = (char *) _commands[j].name; p = _commands[j].name;
while (*p == *q) { while (*p == *q) {
p++; p++;
q++; q++;
@ -984,7 +997,7 @@ static char *_list_args(const char *text, int state)
match_no = com->num_args; match_no = com->num_args;
while (match_no - com->num_args < com->num_args) { while (match_no - com->num_args < com->num_args) {
char *l; const char *l;
l = (the_args + l = (the_args +
com->valid_args[match_no++ - com->num_args])->long_arg; com->valid_args[match_no++ - com->num_args])->long_arg;
if (*(l + 2) && !strncmp(text, l, len)) if (*(l + 2) && !strncmp(text, l, len))

View File

@ -22,7 +22,7 @@ int max_len;
static int _get_max_dev_name_len(struct dev_filter *filter) static int _get_max_dev_name_len(struct dev_filter *filter)
{ {
int len = 0; int len = 0;
int max_len = 0; int maxlen = 0;
struct dev_iter *iter; struct dev_iter *iter;
struct device *dev; struct device *dev;
@ -34,12 +34,12 @@ static int _get_max_dev_name_len(struct dev_filter *filter)
/* Do scan */ /* Do scan */
for (dev = dev_iter_get(iter); dev; dev = dev_iter_get(iter)) { for (dev = dev_iter_get(iter); dev; dev = dev_iter_get(iter)) {
len = strlen(dev_name(dev)); len = strlen(dev_name(dev));
if (len > max_len) if (len > maxlen)
max_len = len; maxlen = len;
} }
dev_iter_destroy(iter); dev_iter_destroy(iter);
return max_len; return maxlen;
} }
static void _count(struct device *dev, int *disks, int *parts) static void _count(struct device *dev, int *disks, int *parts)
@ -52,8 +52,8 @@ static void _count(struct device *dev, int *disks, int *parts)
(*parts)++; (*parts)++;
} }
static void _print(struct cmd_context *cmd, struct device *dev, uint64_t size, static void _print(struct cmd_context *cmd, const struct device *dev,
char *what) uint64_t size, const char *what)
{ {
log_print("%-*s [%15s] %s", max_len, dev_name(dev), log_print("%-*s [%15s] %s", max_len, dev_name(dev),
display_size(cmd, size / 2, SIZE_SHORT), what ? : ""); display_size(cmd, size / 2, SIZE_SHORT), what ? : "");
@ -67,7 +67,7 @@ static int _check_device(struct cmd_context *cmd, struct device *dev)
if (!dev_open(dev, 0)) { if (!dev_open(dev, 0)) {
return 0; return 0;
} }
if (dev_read(dev, 0, 1, &buffer) != 1) { if (dev_read(dev, __UINT64_C(0), (size_t) 1, &buffer) != 1) {
dev_close(dev); dev_close(dev);
return 0; return 0;
} }

View File

@ -22,9 +22,9 @@
int lvrename(struct cmd_context *cmd, int argc, char **argv) int lvrename(struct cmd_context *cmd, int argc, char **argv)
{ {
int maxlen; size_t maxlen;
char *lv_name_old, *lv_name_new; char *lv_name_old, *lv_name_new;
char *vg_name, *vg_name_new, *vg_name_old; const char *vg_name, *vg_name_new, *vg_name_old;
char *st; char *st;
int consistent = 1; int consistent = 1;
@ -78,7 +78,7 @@ int lvrename(struct cmd_context *cmd, int argc, char **argv)
maxlen = NAME_LEN - strlen(vg_name) - strlen(cmd->dev_dir) - 3; maxlen = NAME_LEN - strlen(vg_name) - strlen(cmd->dev_dir) - 3;
if (strlen(lv_name_new) > maxlen) { if (strlen(lv_name_new) > maxlen) {
log_error("New logical volume path exceeds maximum length " log_error("New logical volume path exceeds maximum length "
"of %d!", maxlen); "of %u!", maxlen);
return ECMD_FAILED; return ECMD_FAILED;
} }

View File

@ -27,12 +27,13 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
struct dm_info info; struct dm_info info;
uint32_t extents = 0; uint32_t extents = 0;
uint32_t size = 0; uint32_t size = 0;
uint32_t stripes = 0, stripesize = 0, stripesize_extents = 0; uint32_t stripes = 0, ssize = 0, stripesize_extents = 0;
uint32_t seg_stripes = 0, seg_stripesize = 0, seg_size = 0; uint32_t seg_stripes = 0, seg_stripesize = 0, seg_size = 0;
uint32_t extents_used = 0; uint32_t extents_used = 0;
uint32_t size_rest; uint32_t size_rest;
sign_t sign = SIGN_NONE; sign_t sign = SIGN_NONE;
char *lv_name, *vg_name; char *lv_name;
const char *vg_name;
char *st; char *st;
const char *cmd_name; const char *cmd_name;
struct list *pvh, *segh; struct list *pvh, *segh;
@ -58,12 +59,12 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
} }
if (arg_count(cmd, extents_ARG)) { if (arg_count(cmd, extents_ARG)) {
extents = arg_int_value(cmd, extents_ARG, 0); extents = arg_uint_value(cmd, extents_ARG, 0);
sign = arg_sign_value(cmd, extents_ARG, SIGN_NONE); sign = arg_sign_value(cmd, extents_ARG, SIGN_NONE);
} }
if (arg_count(cmd, size_ARG)) { if (arg_count(cmd, size_ARG)) {
size = arg_int_value(cmd, size_ARG, 0); size = arg_uint_value(cmd, size_ARG, 0);
sign = arg_sign_value(cmd, size_ARG, SIGN_NONE); sign = arg_sign_value(cmd, size_ARG, SIGN_NONE);
} }
@ -125,14 +126,14 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
if (arg_count(cmd, stripes_ARG)) { if (arg_count(cmd, stripes_ARG)) {
if (vg->fid->fmt->features & FMT_SEGMENTS) if (vg->fid->fmt->features & FMT_SEGMENTS)
stripes = arg_int_value(cmd, stripes_ARG, 1); stripes = arg_uint_value(cmd, stripes_ARG, 1);
else else
log_print("Varied striping not supported. Ignoring."); log_print("Varied striping not supported. Ignoring.");
} }
if (arg_count(cmd, stripesize_ARG)) { if (arg_count(cmd, stripesize_ARG)) {
if (vg->fid->fmt->features & FMT_SEGMENTS) if (vg->fid->fmt->features & FMT_SEGMENTS)
stripesize = 2 * arg_int_value(cmd, stripesize_ARG, 0); ssize = 2 * arg_uint_value(cmd, stripesize_ARG, 0);
else else
log_print("Varied stripesize not supported. Ignoring."); log_print("Varied stripesize not supported. Ignoring.");
} }
@ -151,7 +152,8 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
(extents % vg->extent_size); (extents % vg->extent_size);
log_print("Rounding up size to full physical extent %s", log_print("Rounding up size to full physical extent %s",
display_size(cmd, extents / 2, SIZE_SHORT)); display_size(cmd, (uint64_t) extents / 2,
SIZE_SHORT));
} }
extents /= vg->extent_size; extents /= vg->extent_size;
@ -184,8 +186,7 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
seg_size = extents - lv->le_count; seg_size = extents - lv->le_count;
/* If extending, find stripes, stripesize & size of last segment */ /* If extending, find stripes, stripesize & size of last segment */
if (extents > lv->le_count && if (extents > lv->le_count && !(stripes == 1 || (stripes > 1 && ssize))) {
!(stripes == 1 || (stripes > 1 && stripesize))) {
list_iterate(segh, &lv->segments) { list_iterate(segh, &lv->segments) {
struct lv_segment *seg; struct lv_segment *seg;
uint32_t sz, str; uint32_t sz, str;
@ -195,7 +196,7 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
str = seg->stripes; str = seg->stripes;
if ((seg_stripesize && seg_stripesize != sz if ((seg_stripesize && seg_stripesize != sz
&& !stripesize) || && !ssize) ||
(seg_stripes && seg_stripes != str && !stripes)) { (seg_stripes && seg_stripes != str && !stripes)) {
log_error("Please specify number of " log_error("Please specify number of "
"stripes (-i) and stripesize (-I)"); "stripes (-i) and stripesize (-I)");
@ -209,15 +210,18 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
if (!stripes) if (!stripes)
stripes = seg_stripes; stripes = seg_stripes;
if (!stripesize && stripes > 1) { if (!ssize && stripes > 1) {
if (seg_stripesize) { if (seg_stripesize) {
log_print("Using stripesize of last segment " log_print("Using stripesize of last segment "
"%dKB", seg_stripesize / 2); "%dKB", seg_stripesize / 2);
stripesize = seg_stripesize; ssize = seg_stripesize;
} else { } else {
ssize = find_config_int(cmd->cf->root,
"metadata/stripesize",
'/',
DEFAULT_STRIPESIZE) * 2;
log_print("Using default stripesize %dKB", log_print("Using default stripesize %dKB",
STRIPE_SIZE_DEFAULT); ssize / 2);
stripesize = 2 * STRIPE_SIZE_DEFAULT;
} }
} }
} }
@ -226,7 +230,7 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
if (extents < lv->le_count) { if (extents < lv->le_count) {
extents_used = 0; extents_used = 0;
if (stripes || stripesize) if (stripes || ssize)
log_error("Ignoring stripes and stripesize arguments " log_error("Ignoring stripes and stripesize arguments "
"when reducing"); "when reducing");
@ -247,17 +251,17 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
} }
seg_size = extents - extents_used; seg_size = extents - extents_used;
stripesize = seg_stripesize; ssize = seg_stripesize;
stripes = seg_stripes; stripes = seg_stripes;
} }
if (stripes > 1 && !stripesize) { if (stripes > 1 && !ssize) {
log_error("Stripesize for striped segment should not be 0!"); log_error("Stripesize for striped segment should not be 0!");
goto error_cmdline; goto error_cmdline;
} }
if ((stripes > 1)) { if ((stripes > 1)) {
if (!(stripesize_extents = stripesize / vg->extent_size)) if (!(stripesize_extents = ssize / vg->extent_size))
stripesize_extents = 1; stripesize_extents = 1;
if ((size_rest = seg_size % (stripes * stripesize_extents))) { if ((size_rest = seg_size % (stripes * stripesize_extents))) {
@ -332,26 +336,22 @@ int lvresize(struct cmd_context *cmd, int argc, char **argv)
goto error; goto error;
} }
if ((resize == LV_EXTEND && argc) && if (resize == LV_EXTEND) {
!(pvh = create_pv_list(cmd->mem, vg, argc - opt, argv + opt))) { if (!(pvh = argc ? create_pv_list(cmd->mem, vg, argc - opt,
argv + opt) : &vg->pvs)) {
stack; stack;
goto error; goto error;
} }
if (resize == LV_EXTEND) {
if (!archive(vg)) if (!archive(vg))
goto error; goto error;
if (!argc) {
/* Use full list from VG */
pvh = &vg->pvs;
}
log_print("Extending logical volume %s to %s", lv_name, log_print("Extending logical volume %s to %s", lv_name,
display_size(cmd, (uint64_t) display_size(cmd, (uint64_t)
extents * (vg->extent_size / 2), extents * (vg->extent_size / 2),
SIZE_SHORT)); SIZE_SHORT));
if (!lv_extend(vg->fid, lv, stripes, stripesize, if (!lv_extend(vg->fid, lv, stripes, ssize,
extents - lv->le_count, pvh)) extents - lv->le_count, pvh))
goto error; goto error;
} }

View File

@ -29,6 +29,7 @@ static int lvscan_single(struct cmd_context *cmd, struct logical_volume *lv,
const char *active_str, *snapshot_str; const char *active_str, *snapshot_str;
/* FIXME Add -D arg to skip this! */
if (lv_info(lv, &info) && info.exists) if (lv_info(lv, &info) && info.exists)
active_str = "ACTIVE "; active_str = "ACTIVE ";
else else
@ -46,6 +47,8 @@ static int lvscan_single(struct cmd_context *cmd, struct logical_volume *lv,
display_size(cmd, lv->size / 2, SIZE_SHORT), display_size(cmd, lv->size / 2, SIZE_SHORT),
get_alloc_string(lv->alloc)); get_alloc_string(lv->alloc));
/* FIXME sprintf? */
lv_total++; lv_total++;
lv_capacity_total += lv->size; lv_capacity_total += lv->size;

View File

@ -22,7 +22,7 @@
/* FIXME Locking. PVs in VG. */ /* FIXME Locking. PVs in VG. */
int pvchange_single(struct cmd_context *cmd, struct physical_volume *pv, static int _pvchange_single(struct cmd_context *cmd, struct physical_volume *pv,
void *handle) void *handle)
{ {
struct volume_group *vg = NULL; struct volume_group *vg = NULL;
@ -131,7 +131,7 @@ int pvchange_single(struct cmd_context *cmd, struct physical_volume *pv,
backup(vg); backup(vg);
unlock_vg(cmd, pv->vg_name); unlock_vg(cmd, pv->vg_name);
} else { } else {
if (!(pv_write(cmd, pv, &mdas, sector))) { if (!(pv_write(cmd, pv, &mdas, (int64_t) sector))) {
unlock_vg(cmd, ORPHAN); unlock_vg(cmd, ORPHAN);
log_error("Failed to store physical volume \"%s\"", log_error("Failed to store physical volume \"%s\"",
pv_name); pv_name);
@ -154,7 +154,7 @@ int pvchange(struct cmd_context *cmd, int argc, char **argv)
struct physical_volume *pv; struct physical_volume *pv;
char *pv_name; char *pv_name;
struct list *pvh, *pvs; struct list *pvh, *pvslist;
struct list mdas; struct list mdas;
list_init(&mdas); list_init(&mdas);
@ -186,17 +186,17 @@ int pvchange(struct cmd_context *cmd, int argc, char **argv)
continue; continue;
} }
total++; total++;
done += pvchange_single(cmd, pv, NULL); done += _pvchange_single(cmd, pv, NULL);
} }
} else { } else {
log_verbose("Scanning for physical volume names"); log_verbose("Scanning for physical volume names");
if (!(pvs = get_pvs(cmd))) { if (!(pvslist = get_pvs(cmd))) {
return ECMD_FAILED; return ECMD_FAILED;
} }
list_iterate(pvh, pvs) { list_iterate(pvh, pvslist) {
total++; total++;
done += pvchange_single(cmd, done += _pvchange_single(cmd,
list_item(pvh, list_item(pvh,
struct pv_list)->pv, struct pv_list)->pv,
NULL); NULL);

View File

@ -19,7 +19,6 @@
*/ */
#include "tools.h" #include "tools.h"
#include "defaults.h"
const char _really_init[] = const char _really_init[] =
"Really INITIALIZE physical volume \"%s\" of volume group \"%s\" [y/n]? "; "Really INITIALIZE physical volume \"%s\" of volume group \"%s\" [y/n]? ";
@ -78,14 +77,14 @@ static void pvcreate_single(struct cmd_context *cmd, const char *pv_name,
{ {
struct physical_volume *pv, *existing_pv; struct physical_volume *pv, *existing_pv;
struct id id, *idp = NULL; struct id id, *idp = NULL;
char *uuid; const char *uuid = NULL;
uint64_t size = 0; uint64_t size = 0;
struct device *dev; struct device *dev;
struct list mdas; struct list mdas;
int pvmetadatacopies; int pvmetadatacopies;
uint64_t pvmetadatasize; uint64_t pvmetadatasize;
struct volume_group *vg; struct volume_group *vg;
char *restorefile; const char *restorefile;
uint64_t pe_start = 0; uint64_t pe_start = 0;
uint32_t extent_count = 0, extent_size = 0; uint32_t extent_count = 0, extent_size = 0;
@ -130,9 +129,10 @@ static void pvcreate_single(struct cmd_context *cmd, const char *pv_name,
if (!pvcreate_check(cmd, pv_name)) if (!pvcreate_check(cmd, pv_name))
goto error; goto error;
size = arg_uint64_value(cmd, physicalvolumesize_ARG, 0) * 2; size = arg_uint64_value(cmd, physicalvolumesize_ARG, __UINT64_C(0)) * 2;
pvmetadatasize = arg_uint64_value(cmd, metadatasize_ARG, 0) * 2; pvmetadatasize = arg_uint64_value(cmd, metadatasize_ARG, __UINT64_C(0))
* 2;
if (!pvmetadatasize) if (!pvmetadatasize)
pvmetadatasize = find_config_int(cmd->cf->root, pvmetadatasize = find_config_int(cmd->cf->root,
"metadata/pvmetadatasize", "metadata/pvmetadatasize",
@ -169,7 +169,7 @@ static void pvcreate_single(struct cmd_context *cmd, const char *pv_name,
log_very_verbose("Writing physical volume data to disk \"%s\"", log_very_verbose("Writing physical volume data to disk \"%s\"",
pv_name); pv_name);
if (!(pv_write(cmd, pv, &mdas, arg_int_value(cmd, labelsector_ARG, if (!(pv_write(cmd, pv, &mdas, arg_int64_value(cmd, labelsector_ARG,
DEFAULT_LABELSECTOR)))) { DEFAULT_LABELSECTOR)))) {
log_error("Failed to write physical volume \"%s\"", pv_name); log_error("Failed to write physical volume \"%s\"", pv_name);
goto error; goto error;

View File

@ -20,7 +20,7 @@
#include "tools.h" #include "tools.h"
int pvdisplay_single(struct cmd_context *cmd, struct volume_group *vg, static int _pvdisplay_single(struct cmd_context *cmd, struct volume_group *vg,
struct physical_volume *pv, void *handle) struct physical_volume *pv, void *handle)
{ {
uint64_t size; uint64_t size;
@ -82,7 +82,7 @@ int pvdisplay(struct cmd_context *cmd, int argc, char **argv)
return EINVALID_CMD_LINE; return EINVALID_CMD_LINE;
} }
process_each_pv(cmd, argc, argv, NULL, NULL, pvdisplay_single); process_each_pv(cmd, argc, argv, NULL, NULL, _pvdisplay_single);
return 0; return 0;
} }

View File

@ -19,7 +19,6 @@
*/ */
#include "tools.h" #include "tools.h"
#include "defaults.h"
const char _really_wipe[] = const char _really_wipe[] =
"Really WIPE LABELS from physical volume \"%s\" of volume group \"%s\" [y/n]? "; "Really WIPE LABELS from physical volume \"%s\" of volume group \"%s\" [y/n]? ";

View File

@ -23,11 +23,11 @@
int pv_max_name_len = 0; int pv_max_name_len = 0;
int vg_max_name_len = 0; int vg_max_name_len = 0;
void pvscan_display_single(struct cmd_context *cmd, struct physical_volume *pv, static void _pvscan_display_single(struct cmd_context *cmd,
void *handle) struct physical_volume *pv, void *handle)
{ {
char uuid[64]; char uuid[64];
int vg_name_len = 0; unsigned int vg_name_len = 0;
char pv_tmp_name[NAME_LEN] = { 0, }; char pv_tmp_name[NAME_LEN] = { 0, };
char vg_tmp_name[NAME_LEN] = { 0, }; char vg_tmp_name[NAME_LEN] = { 0, };
@ -81,10 +81,10 @@ void pvscan_display_single(struct cmd_context *cmd, struct physical_volume *pv,
"[%s / %s free]", "[%s / %s free]",
pv_max_name_len, pv_tmp_name, pv_max_name_len, pv_tmp_name,
vg_name_this, vg_name_this,
display_size(cmd, pv->pe_count * display_size(cmd, (uint64_t) pv->pe_count *
pv->pe_size / 2, pv->pe_size / 2, SIZE_SHORT),
SIZE_SHORT), display_size(cmd, (uint64_t) (pv->pe_count -
display_size(cmd, (pv->pe_count - pv->pe_alloc_count) pv->pe_alloc_count)
* pv->pe_size / 2, SIZE_SHORT)); * pv->pe_size / 2, SIZE_SHORT));
return; return;
} }
@ -94,9 +94,11 @@ void pvscan_display_single(struct cmd_context *cmd, struct physical_volume *pv,
("PV %-*s VG %-*s %s [%s / %s free]", pv_max_name_len, ("PV %-*s VG %-*s %s [%s / %s free]", pv_max_name_len,
pv_tmp_name, vg_max_name_len, vg_tmp_name, pv_tmp_name, vg_max_name_len, vg_tmp_name,
pv->fmt ? pv->fmt->name : " ", pv->fmt ? pv->fmt->name : " ",
display_size(cmd, pv->pe_count * pv->pe_size / 2, SIZE_SHORT), display_size(cmd, (uint64_t) pv->pe_count * pv->pe_size / 2,
display_size(cmd, SIZE_SHORT), display_size(cmd, (uint64_t)
(pv->pe_count - pv->pe_alloc_count) * pv->pe_size / 2, (pv->pe_count -
pv->pe_alloc_count) *
pv->pe_size / 2,
SIZE_SHORT)); SIZE_SHORT));
return; return;
} }
@ -106,7 +108,7 @@ int pvscan(struct cmd_context *cmd, int argc, char **argv)
int new_pvs_found = 0; int new_pvs_found = 0;
int pvs_found = 0; int pvs_found = 0;
struct list *pvs; struct list *pvslist;
struct list *pvh; struct list *pvh;
struct pv_list *pvl; struct pv_list *pvl;
struct physical_volume *pv; struct physical_volume *pv;
@ -135,11 +137,11 @@ int pvscan(struct cmd_context *cmd, int argc, char **argv)
cache_destroy(); cache_destroy();
log_verbose("Walking through all physical volumes"); log_verbose("Walking through all physical volumes");
if (!(pvs = get_pvs(cmd))) if (!(pvslist = get_pvs(cmd)))
return ECMD_FAILED; return ECMD_FAILED;
/* eliminate exported/new if required */ /* eliminate exported/new if required */
list_iterate(pvh, pvs) { list_iterate(pvh, pvslist) {
pvl = list_item(pvh, struct pv_list); pvl = list_item(pvh, struct pv_list);
pv = pvl->pv; pv = pvl->pv;
@ -173,7 +175,7 @@ int pvscan(struct cmd_context *cmd, int argc, char **argv)
/* find maximum pv name length */ /* find maximum pv name length */
pv_max_name_len = vg_max_name_len = 0; pv_max_name_len = vg_max_name_len = 0;
list_iterate(pvh, pvs) { list_iterate(pvh, pvslist) {
pv = list_item(pvh, struct pv_list)->pv; pv = list_item(pvh, struct pv_list)->pv;
len = strlen(dev_name(pv->dev)); len = strlen(dev_name(pv->dev));
if (pv_max_name_len < len) if (pv_max_name_len < len)
@ -185,8 +187,8 @@ int pvscan(struct cmd_context *cmd, int argc, char **argv)
pv_max_name_len += 2; pv_max_name_len += 2;
vg_max_name_len += 2; vg_max_name_len += 2;
list_iterate(pvh, pvs) list_iterate(pvh, pvslist)
pvscan_display_single(cmd, list_item(pvh, struct pv_list)->pv, _pvscan_display_single(cmd, list_item(pvh, struct pv_list)->pv,
NULL); NULL);
if (!pvs_found) { if (!pvs_found) {

View File

@ -20,7 +20,6 @@
#include "tools.h" #include "tools.h"
#include "report.h" #include "report.h"
#include "defaults.h"
static int _vgs_single(struct cmd_context *cmd, const char *vg_name, static int _vgs_single(struct cmd_context *cmd, const char *vg_name,
struct volume_group *vg, int consistent, void *handle) struct volume_group *vg, int consistent, void *handle)
@ -83,8 +82,9 @@ static int _report(struct cmd_context *cmd, int argc, char **argv,
report_type_t report_type) report_type_t report_type)
{ {
void *report_handle; void *report_handle;
char *opts, *str; const char *opts;
const char *keys, *options, *separator; char *str;
const char *keys = NULL, *options = NULL, *separator;
int aligned, buffered, headings; int aligned, buffered, headings;
@ -156,12 +156,11 @@ static int _report(struct cmd_context *cmd, int argc, char **argv,
return 0; return 0;
} }
if (*opts == '+') { if (*opts == '+') {
*opts = ','; str = pool_alloc(cmd->mem,
str =
pool_alloc(cmd->mem,
strlen(options) + strlen(opts) + 1); strlen(options) + strlen(opts) + 1);
strcpy(str, options); strcpy(str, options);
strcat(str, opts); strcat(str, ",");
strcat(str, opts + 1);
options = str; options = str;
} else } else
options = opts; options = opts;

View File

@ -70,7 +70,7 @@ int process_each_lv(struct cmd_context *cmd, int argc, char **argv,
struct logical_volume *lv; struct logical_volume *lv;
struct lv_list *lvl; struct lv_list *lvl;
char *vgname; const char *vgname;
if (argc) { if (argc) {
log_verbose("Using logical volume(s) on command line"); log_verbose("Using logical volume(s) on command line");
@ -326,7 +326,7 @@ int process_each_pv(struct cmd_context *cmd, int argc, char **argv,
struct pv_list *pvl; struct pv_list *pvl;
struct physical_volume *pv; struct physical_volume *pv;
struct list *pvs, *pvh; struct list *pvslist, *pvh;
if (argc) { if (argc) {
log_verbose("Using physical volume(s) on command line"); log_verbose("Using physical volume(s) on command line");
@ -359,10 +359,10 @@ int process_each_pv(struct cmd_context *cmd, int argc, char **argv,
process_each_pv_in_vg(cmd, vg, handle, process_single); process_each_pv_in_vg(cmd, vg, handle, process_single);
} else { } else {
log_verbose("Scanning for physical volume names"); log_verbose("Scanning for physical volume names");
if (!(pvs = get_pvs(cmd))) if (!(pvslist = get_pvs(cmd)))
return ECMD_FAILED; return ECMD_FAILED;
list_iterate(pvh, pvs) { list_iterate(pvh, pvslist) {
pv = list_item(pvh, struct pv_list)->pv; pv = list_item(pvh, struct pv_list)->pv;
ret = process_single(cmd, NULL, pv, handle); ret = process_single(cmd, NULL, pv, handle);
if (ret > ret_max) if (ret > ret_max)
@ -374,9 +374,9 @@ int process_each_pv(struct cmd_context *cmd, int argc, char **argv,
return ret_max; return ret_max;
} }
char *extract_vgname(struct cmd_context *cmd, char *lv_name) const char *extract_vgname(struct cmd_context *cmd, const char *lv_name)
{ {
char *vg_name = lv_name; const char *vg_name = lv_name;
char *st; char *st;
char *dev_dir = cmd->dev_dir; char *dev_dir = cmd->dev_dir;

View File

@ -72,7 +72,7 @@ int process_each_lv_in_vg(struct cmd_context *cmd, struct volume_group *vg,
void *handle)); void *handle));
char *default_vgname(struct cmd_context *cmd); char *default_vgname(struct cmd_context *cmd);
char *extract_vgname(struct cmd_context *cmd, char *lv_name); const char *extract_vgname(struct cmd_context *cmd, const char *lv_name);
/* /*
* Builds a list of pv's from the names in argv. Used in * Builds a list of pv's from the names in argv. Used in

View File

@ -9,10 +9,14 @@
#define _GNU_SOURCE #define _GNU_SOURCE
#include <assert.h>
#include "log.h"
#include "activate.h" #include "activate.h"
#include "archive.h" #include "archive.h"
#include "cache.h" #include "cache.h"
#include "config.h" #include "config.h"
#include "defaults.h"
#include "dbg_malloc.h" #include "dbg_malloc.h"
#include "dev-cache.h" #include "dev-cache.h"
#include "device.h" #include "device.h"
@ -26,20 +30,17 @@
#include "metadata.h" #include "metadata.h"
#include "list.h" #include "list.h"
#include "locking.h" #include "locking.h"
#include "log.h"
#include "lvm-file.h" #include "lvm-file.h"
#include "lvm-string.h" #include "lvm-string.h"
#include "pool.h" #include "pool.h"
#include "toolcontext.h" #include "toolcontext.h"
#include "toollib.h" #include "toollib.h"
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h> #include <ctype.h>
#include <limits.h> #include <limits.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h> #include <sys/types.h>
#define CMD_LEN 256 #define CMD_LEN 256
@ -67,13 +68,14 @@ typedef enum {
/* a global table of possible arguments */ /* a global table of possible arguments */
struct arg { struct arg {
char short_arg; const char short_arg;
char *long_arg; const char *long_arg;
int (*fn) (struct cmd_context * cmd, struct arg * a); int (*fn) (struct cmd_context * cmd, struct arg * a);
int count; int count;
char *value; char *value;
uint32_t i_value; int32_t i_value;
uint32_t ui_value;
int64_t i64_value; int64_t i64_value;
uint64_t ui64_value; uint64_t ui64_value;
sign_t sign; sign_t sign;
@ -108,50 +110,59 @@ int units_arg(struct cmd_context *cmd, struct arg *a);
char yes_no_prompt(const char *prompt, ...); char yes_no_prompt(const char *prompt, ...);
/* we use the enums to access the switches */ /* we use the enums to access the switches */
static inline int arg_count(struct cmd_context *cmd, int a) static inline const int arg_count(struct cmd_context *cmd, int a)
{ {
return cmd->args[a].count; return cmd->args[a].count;
} }
static inline char *arg_value(struct cmd_context *cmd, int a) static inline const char *arg_value(struct cmd_context *cmd, int a)
{ {
return cmd->args[a].value; return cmd->args[a].value;
} }
static inline char *arg_str_value(struct cmd_context *cmd, int a, char *def) static inline const char *arg_str_value(struct cmd_context *cmd, int a,
const char *def)
{ {
return arg_count(cmd, a) ? cmd->args[a].value : def; return arg_count(cmd, a) ? cmd->args[a].value : def;
} }
static inline uint32_t arg_int_value(struct cmd_context *cmd, int a, static inline const int32_t arg_int_value(struct cmd_context *cmd, int a,
uint32_t def) const int32_t def)
{ {
return arg_count(cmd, a) ? cmd->args[a].i_value : def; return arg_count(cmd, a) ? cmd->args[a].i_value : def;
} }
static inline int64_t arg_int64_value(struct cmd_context *cmd, int a, static inline const uint32_t arg_uint_value(struct cmd_context *cmd, int a,
uint64_t def) const uint32_t def)
{
return arg_count(cmd, a) ? cmd->args[a].ui_value : def;
}
static inline const int64_t arg_int64_value(struct cmd_context *cmd, int a,
const uint64_t def)
{ {
return arg_count(cmd, a) ? cmd->args[a].i64_value : def; return arg_count(cmd, a) ? cmd->args[a].i64_value : def;
} }
static inline uint64_t arg_uint64_value(struct cmd_context *cmd, int a, static inline const uint64_t arg_uint64_value(struct cmd_context *cmd, int a,
uint64_t def) const uint64_t def)
{ {
return arg_count(cmd, a) ? cmd->args[a].ui64_value : def; return arg_count(cmd, a) ? cmd->args[a].ui64_value : def;
} }
static inline void *arg_ptr_value(struct cmd_context *cmd, int a, void *def) static inline const void *arg_ptr_value(struct cmd_context *cmd, int a,
const void *def)
{ {
return arg_count(cmd, a) ? cmd->args[a].ptr : def; return arg_count(cmd, a) ? cmd->args[a].ptr : def;
} }
static inline sign_t arg_sign_value(struct cmd_context *cmd, int a, sign_t def) static inline const sign_t arg_sign_value(struct cmd_context *cmd, int a,
const sign_t def)
{ {
return arg_count(cmd, a) ? cmd->args[a].sign : def; return arg_count(cmd, a) ? cmd->args[a].sign : def;
} }
static inline int arg_count_increment(struct cmd_context *cmd, int a) static inline const int arg_count_increment(struct cmd_context *cmd, int a)
{ {
return cmd->args[a].count++; return cmd->args[a].count++;
} }

View File

@ -43,7 +43,8 @@ static int _activate_lvs_in_vg(struct cmd_context *cmd,
return count; return count;
} }
void vgchange_available(struct cmd_context *cmd, struct volume_group *vg) static void _vgchange_available(struct cmd_context *cmd,
struct volume_group *vg)
{ {
int lv_open, active; int lv_open, active;
int available = !strcmp(arg_str_value(cmd, available_ARG, "n"), "y"); int available = !strcmp(arg_str_value(cmd, available_ARG, "n"), "y");
@ -72,7 +73,8 @@ void vgchange_available(struct cmd_context *cmd, struct volume_group *vg)
return; return;
} }
void vgchange_resizeable(struct cmd_context *cmd, struct volume_group *vg) static void _vgchange_resizeable(struct cmd_context *cmd,
struct volume_group *vg)
{ {
int resizeable = !strcmp(arg_str_value(cmd, resizeable_ARG, "n"), "y"); int resizeable = !strcmp(arg_str_value(cmd, resizeable_ARG, "n"), "y");
@ -106,9 +108,10 @@ void vgchange_resizeable(struct cmd_context *cmd, struct volume_group *vg)
return; return;
} }
void vgchange_logicalvolume(struct cmd_context *cmd, struct volume_group *vg) static void _vgchange_logicalvolume(struct cmd_context *cmd,
struct volume_group *vg)
{ {
int max_lv = arg_int_value(cmd, logicalvolume_ARG, 0); uint32_t max_lv = arg_uint_value(cmd, logicalvolume_ARG, 0);
if (!(vg->status & RESIZEABLE_VG)) { if (!(vg->status & RESIZEABLE_VG)) {
log_error("Volume group \"%s\" must be resizeable " log_error("Volume group \"%s\" must be resizeable "
@ -165,13 +168,13 @@ static int vgchange_single(struct cmd_context *cmd, const char *vg_name,
} }
if (arg_count(cmd, available_ARG)) if (arg_count(cmd, available_ARG))
vgchange_available(cmd, vg); _vgchange_available(cmd, vg);
if (arg_count(cmd, resizeable_ARG)) if (arg_count(cmd, resizeable_ARG))
vgchange_resizeable(cmd, vg); _vgchange_resizeable(cmd, vg);
if (arg_count(cmd, logicalvolume_ARG)) if (arg_count(cmd, logicalvolume_ARG))
vgchange_logicalvolume(cmd, vg); _vgchange_logicalvolume(cmd, vg);
return 0; return 0;
} }

View File

@ -19,7 +19,6 @@
*/ */
#include "tools.h" #include "tools.h"
#include "defaults.h"
static int vgconvert_single(struct cmd_context *cmd, const char *vg_name, static int vgconvert_single(struct cmd_context *cmd, const char *vg_name,
struct volume_group *vg, int consistent, struct volume_group *vg, int consistent,
@ -63,7 +62,8 @@ static int vgconvert_single(struct cmd_context *cmd, const char *vg_name,
} }
if (cmd->fmt->features & FMT_MDAS) { if (cmd->fmt->features & FMT_MDAS) {
pvmetadatasize = arg_uint64_value(cmd, metadatasize_ARG, 0) * 2; pvmetadatasize = arg_uint64_value(cmd, metadatasize_ARG,
__UINT64_C(0)) * 2;
if (!pvmetadatasize) if (!pvmetadatasize)
pvmetadatasize = pvmetadatasize =
find_config_int(cmd->cf->root, find_config_int(cmd->cf->root,
@ -122,7 +122,7 @@ static int vgconvert_single(struct cmd_context *cmd, const char *vg_name,
log_very_verbose("Writing physical volume data to disk \"%s\"", log_very_verbose("Writing physical volume data to disk \"%s\"",
dev_name(pv->dev)); dev_name(pv->dev));
if (!(pv_write(cmd, pv, &mdas, if (!(pv_write(cmd, pv, &mdas,
arg_int_value(cmd, labelsector_ARG, arg_int64_value(cmd, labelsector_ARG,
DEFAULT_LABELSECTOR)))) { DEFAULT_LABELSECTOR)))) {
log_error("Failed to write physical volume \"%s\"", log_error("Failed to write physical volume \"%s\"",
dev_name(pv->dev)); dev_name(pv->dev));

View File

@ -28,7 +28,7 @@
int vgcreate(struct cmd_context *cmd, int argc, char **argv) int vgcreate(struct cmd_context *cmd, int argc, char **argv)
{ {
int max_lv, max_pv; size_t max_lv, max_pv;
uint32_t extent_size; uint32_t extent_size;
char *vg_name; char *vg_name;
char vg_path[PATH_MAX]; char vg_path[PATH_MAX];
@ -46,12 +46,12 @@ int vgcreate(struct cmd_context *cmd, int argc, char **argv)
} }
vg_name = argv[0]; vg_name = argv[0];
max_lv = arg_int_value(cmd, maxlogicalvolumes_ARG, DEFAULT_LV); max_lv = arg_uint_value(cmd, maxlogicalvolumes_ARG, DEFAULT_LV);
max_pv = arg_int_value(cmd, maxphysicalvolumes_ARG, DEFAULT_PV); max_pv = arg_uint_value(cmd, maxphysicalvolumes_ARG, DEFAULT_PV);
/* Units of 512-byte sectors */ /* Units of 512-byte sectors */
extent_size = extent_size =
arg_int_value(cmd, physicalextentsize_ARG, DEFAULT_EXTENT) * 2; arg_uint_value(cmd, physicalextentsize_ARG, DEFAULT_EXTENT) * 2;
if (max_lv < 1) { if (max_lv < 1) {
log_error("maxlogicalvolumes too low"); log_error("maxlogicalvolumes too low");

View File

@ -20,7 +20,7 @@
#include "tools.h" #include "tools.h"
int vgmerge_single(struct cmd_context *cmd, const char *vg_name_to, static int _vgmerge_single(struct cmd_context *cmd, const char *vg_name_to,
const char *vg_name_from) const char *vg_name_from)
{ {
struct volume_group *vg_to, *vg_from; struct volume_group *vg_to, *vg_from;
@ -202,7 +202,7 @@ int vgmerge(struct cmd_context *cmd, int argc, char **argv)
argv++; argv++;
for (; opt < argc; opt++) { for (; opt < argc; opt++) {
ret = vgmerge_single(cmd, vg_name_to, argv[opt]); ret = _vgmerge_single(cmd, vg_name_to, argv[opt]);
if (ret > ret_max) if (ret > ret_max)
ret_max = ret; ret_max = ret;
} }

View File

@ -48,7 +48,7 @@ static int vgreduce_single(struct cmd_context *cmd, struct volume_group *vg,
if (pvl) if (pvl)
list_del(&pvl->list); list_del(&pvl->list);
*pv->vg_name = '\0'; pv->vg_name = ORPHAN;
vg->pv_count--; vg->pv_count--;
vg->free_count -= pv->pe_count - pv->pe_alloc_count; vg->free_count -= pv->pe_count - pv->pe_alloc_count;
vg->extent_count -= pv->pe_count; vg->extent_count -= pv->pe_count;
@ -59,7 +59,7 @@ static int vgreduce_single(struct cmd_context *cmd, struct volume_group *vg,
return ECMD_FAILED; return ECMD_FAILED;
} }
if (!pv_write(cmd, pv, NULL, -1)) { if (!pv_write(cmd, pv, NULL, __INT64_C(-1))) {
log_error("Failed to clear metadata from physical " log_error("Failed to clear metadata from physical "
"volume \"%s\" " "volume \"%s\" "
"after removal from \"%s\"", name, vg->name); "after removal from \"%s\"", name, vg->name);

View File

@ -63,9 +63,9 @@ static int vgremove_single(struct cmd_context *cmd, const char *vg_name,
pv = list_item(pvh, struct pv_list)->pv; pv = list_item(pvh, struct pv_list)->pv;
log_verbose("Removing physical volume \"%s\" from " log_verbose("Removing physical volume \"%s\" from "
"volume group \"%s\"", dev_name(pv->dev), vg_name); "volume group \"%s\"", dev_name(pv->dev), vg_name);
*pv->vg_name = '\0'; pv->vg_name = ORPHAN;
/* FIXME Write to same sector label was read from */ /* FIXME Write to same sector label was read from */
if (!pv_write(cmd, pv, NULL, -1)) { if (!pv_write(cmd, pv, NULL, __INT64_C(-1))) {
log_error("Failed to remove physical volume \"%s\"" log_error("Failed to remove physical volume \"%s\""
" from volume group \"%s\"", " from volume group \"%s\"",
dev_name(pv->dev), vg_name); dev_name(pv->dev), vg_name);

View File

@ -23,7 +23,7 @@
int vgrename(struct cmd_context *cmd, int argc, char **argv) int vgrename(struct cmd_context *cmd, int argc, char **argv)
{ {
char *dev_dir; char *dev_dir;
int length; unsigned int length;
int consistent = 1; int consistent = 1;
char *vg_name_old, *vg_name_new; char *vg_name_old, *vg_name_new;
@ -31,7 +31,6 @@ int vgrename(struct cmd_context *cmd, int argc, char **argv)
char old_path[NAME_LEN], new_path[NAME_LEN]; char old_path[NAME_LEN], new_path[NAME_LEN];
struct volume_group *vg_old, *vg_new; struct volume_group *vg_old, *vg_new;
struct list *pvh;
if (argc != 2) { if (argc != 2) {
log_error("Old and new volume group names need specifying"); log_error("Old and new volume group names need specifying");
@ -124,13 +123,7 @@ int vgrename(struct cmd_context *cmd, int argc, char **argv)
goto error; goto error;
/* Change the volume group name */ /* Change the volume group name */
strcpy(vg_old->name, vg_name_new); vg_rename(cmd, vg_old, vg_name_new);
/* FIXME Should vg_write fix these implicitly? It has to check them. */
list_iterate(pvh, &vg_old->pvs) {
strcpy(list_item(pvh, struct pv_list)->pv->vg_name,
vg_name_new);
}
sprintf(old_path, "%s%s", dev_dir, vg_name_old); sprintf(old_path, "%s%s", dev_dir, vg_name_old);
sprintf(new_path, "%s%s", dev_dir, vg_name_new); sprintf(new_path, "%s%s", dev_dir, vg_name_new);

View File

@ -68,7 +68,7 @@ static int _move_lvs(struct volume_group *vg_from, struct volume_group *vg_to)
struct lv_segment *seg; struct lv_segment *seg;
struct physical_volume *pv; struct physical_volume *pv;
struct volume_group *vg_with; struct volume_group *vg_with;
int s; unsigned int s;
list_iterate_safe(lvh, lvht, &vg_from->lvs) { list_iterate_safe(lvh, lvht, &vg_from->lvs) {
lv = list_item(lvh, struct lv_list)->lv; lv = list_item(lvh, struct lv_list)->lv;