diff --git a/build-deb.sh b/build-deb.sh index c74f89667..417d8913a 100755 --- a/build-deb.sh +++ b/build-deb.sh @@ -171,9 +171,15 @@ build_deb() { echo "Build for debian 9 or newer using actual packaging" tarname=${project}_${debianversion}.orig.tar.gz clean_up - python -m build -s - ln -s ${source_project}-${strictversion}.tar.gz dist/${tarname} - directory=${source_project}-${strictversion} + if [ $debian_version -le 11 ] + then + python3 setup.py debian_src + directory=${project}-${strictversion} + else + python3 -m build -s + ln -s ${source_project}-${strictversion}.tar.gz dist/${tarname} + directory=${source_project}-${strictversion} + fi cp -f dist/${tarname} ${build_directory} if [ -f dist/${project}-testimages.tar.gz ] then @@ -236,10 +242,13 @@ build_deb() { 11) debian_name=bullseye ;; + 12) + debian_name=bookworm + ;; esac - dch -v ${debianversion}-1 "upstream development build of ${project} ${version}" --force-distribution - dch -D ${debian_name}-backports -l~bpo${debian_version}+ "${project} snapshot ${version} built for ${target_system}" --force-distribution + dch --force-distribution -v ${debianversion}-1 "upstream development build of ${project} ${version}" + dch --force-distribution -D ${debian_name}-backports -l~bpo${debian_version}+ "${project} snapshot ${version} built for ${target_system}" #dch --bpo "${project} snapshot ${version} built for ${target_system}" dpkg-buildpackage -r rc=$? diff --git a/src/fabio/binaryimage.py b/src/fabio/binaryimage.py index cc145b7d2..a3319fb32 100644 --- a/src/fabio/binaryimage.py +++ b/src/fabio/binaryimage.py @@ -38,7 +38,7 @@ __contact__ = "gael.goret@esrf.fr" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" -__version__ = "17/10/2012" +__date__ = "30/05/2024" import io from .fabioimage import FabioImage @@ -84,17 +84,21 @@ def read(self, fname, dim1, dim2, offset=0, bytecode="int32", endian="<"): :param int dim2: image dimensions (Slow index) :param int offset: starting position of the data-block. If negative, starts at the end. :param bytecode: can be "int8","int16","int32","int64","uint8","uint16","uint32","uint64","float32","float64",... - :param endian: among short or long endian ("<" or ">") + :param endian: among litte or big endian ("<" or ">") """ + assert endian in ('<', '>', '=') + bytecode = numpy.dtype(bytecode) + if not bytecode.str.startswith(endian): + bytecode = numpy.dtype(endian + bytecode.str[1:]) self.filename = fname self._shape = dim2, dim1 self._bytecode = bytecode - with open(self.filename, "rb") as f: + with open(self.filename, "rb") as f: dims = [dim2, dim1] bpp = numpy.dtype(bytecode).itemsize size = dims[0] * dims[1] * bpp - + if offset >= 0: f.seek(offset) else: @@ -107,8 +111,6 @@ def read(self, fname, dim1, dim2, offset=0, bytecode="int32", endian="<"): logger.error('Uncommon error encountered when reading file') rawData = f.read(size) data = numpy.frombuffer(rawData, bytecode).copy().reshape(tuple(dims)) - if self.swap_needed(endian): - data.byteswap(True) self.data = data self._shape = None return self diff --git a/src/fabio/compression/agi_bitfield.py b/src/fabio/compression/agi_bitfield.py index e2b123ca7..ff8c806eb 100644 --- a/src/fabio/compression/agi_bitfield.py +++ b/src/fabio/compression/agi_bitfield.py @@ -39,7 +39,7 @@ __author__ = ["Florian Plaswig", "Jérôme Kieffer"] __contact__ = "jerome.kieffer@esrf.eu" __license__ = "MIT" -__date__ = "13/11/2020" +__date__ = "30/05/2024" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" import logging @@ -79,7 +79,7 @@ def compress(frame): if numpy.little_endian: buffer.write(row_start.tobytes()) else: - buffer.write(row_start.byteswap.tobytes()) + buffer.write(row_start.byteswap().tobytes()) return data_size + buffer.getvalue() diff --git a/src/fabio/dm3image.py b/src/fabio/dm3image.py index 3e7955ae9..ac969d5d2 100644 --- a/src/fabio/dm3image.py +++ b/src/fabio/dm3image.py @@ -37,7 +37,7 @@ + Jon Wright, ESRF """ - +import sys import logging import numpy from .fabioimage import FabioImage @@ -93,11 +93,12 @@ def __init__(self, *args, **kwargs): self.tag_label_length = None def _readheader(self): + BE_uint32 = numpy.dtype('>u4') self.infile.seek(0) - file_format = self.readbytes(4, numpy.uint32)[0] # should be 3 - assert file_format == 3, 'Wrong file type ' - self.bytes_in_file = self.readbytes(4, numpy.uint32)[0] - self.byte_order = self.readbytes(4, numpy.uint32)[0] # 0 = big, 1= little + file_format = self.readbytes(4, BE_uint32, swap=False)[0] # should be 3 + assert file_format == 3, 'Wrong file type' + self.bytes_in_file = self.readbytes(4, BE_uint32, swap=False)[0] + self.byte_order = self.readbytes(4, BE_uint32, swap=False)[0] # 0 = big, 1= little logger.debug('read dm3 file - file format %s' % file_format) logger.debug('Bytes in file: %s' % self.bytes_in_file) logger.debug('Byte order: %s - 0 = bigEndian , 1 = littleEndian' % self.byte_order) diff --git a/src/fabio/ext/src/columnfile.c b/src/fabio/ext/src/columnfile.c index 15deaa4f6..d8a27d808 100644 --- a/src/fabio/ext/src/columnfile.c +++ b/src/fabio/ext/src/columnfile.c @@ -31,7 +31,16 @@ FILE* fn_fopen(const char* fname, const char* mode) #include "columnfile.h" -static char hdr_ctl[]="# %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s"; +/* 32 conversions for sscanf below = 8*4 */ +static char hdr_ctl[]="# " +"%s %s %s %s " +"%s %s %s %s " +"%s %s %s %s " +"%s %s %s %s " +"%s %s %s %s " +"%s %s %s %s " +"%s %s %s %s " +"%s %s %s %s "; @@ -158,8 +167,8 @@ void *cf_read_ascii(void *fp, void *dest, unsigned int FLAGS){/*{{{*/ } /*try to sscanf it using 32 conversions - if that doesn't work use pedestrian version*/ - ncols=sscanf_s(line,hdr_ctl,repeat16_inc(clabels,0),repeat16_inc(clabels,16),*(clabels+32)); - if (ncols==32+1 || ncols==0){ + ncols=sscanf_s(line,hdr_ctl,repeat16_inc(clabels,0),repeat16_inc(clabels,16)); + if (ncols==32 || ncols==0){ /*aha we probably didn't get it all*/ /*step through buffer with char ptr and check for whitespace->non-ws slopes. when one is found read from pc-1 into header storage. exit when line is exhausted*/ /*count the number of entries*/ @@ -193,11 +202,11 @@ void *cf_read_ascii(void *fp, void *dest, unsigned int FLAGS){/*{{{*/ if ((gzgets((gzFile )fp,line,2048))==Z_NULL) {fprintf(stderr,"zlib io error reading file at %s\n",__LINE__);return -1;} if(gzeof((gzFile)fp)) break; }else{ - fgets(line,2048,(FILE *)fp); + if fgets(line,2048,(FILE *)fp) == NULL) break; if (feof((FILE *)fp)) break; } #else - fgets(line,2048,(FILE *)fp); + if (fgets(line,2048,(FILE *)fp) == NULL) break; if (feof((FILE *)fp)) break; #endif diff --git a/src/fabio/fit2dmaskimage.py b/src/fabio/fit2dmaskimage.py index 078142553..d2cb4ec32 100644 --- a/src/fabio/fit2dmaskimage.py +++ b/src/fabio/fit2dmaskimage.py @@ -65,10 +65,8 @@ def _readheader(self, infile): (b"K", 12)]: if header[j] != i[0]: raise Exception("Not a fit2d mask file") - fit2dhdr = numpy.frombuffer(header, numpy.int32) # Enforce little endian - if not numpy.little_endian: - fit2dhdr.byteswap(True) + fit2dhdr = numpy.frombuffer(header, numpy.dtype("