From: Saul Wold <sgw@linux.intel.com>
To: Konrad Scherer <konrad.scherer@windriver.com>,
Laurentiu Palcu <laurentiu.palcu@intel.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH] Allow script to work with Python 2.4 and 3.
Date: Mon, 14 Oct 2013 11:03:09 -0700 [thread overview]
Message-ID: <525C31DD.6020900@linux.intel.com> (raw)
In-Reply-To: <1381505415-23693-2-git-send-email-konrad.scherer@windriver.com>
On 10/11/2013 08:30 AM, Konrad Scherer wrote:
> From: Konrad Scherer <Konrad.Scherer@windriver.com>
>
> Python 2.4 does not support the 'b' string literal or the
> keyword 'as' in exception handling. Python 3 does not accept
> the old method of exception handling and defaults to unicode.
> The b() function converts strings to bytes on Python 3 and
> using sys.exc_info() avoids the exception handling syntax.
>
I would like to get Laurentiu's opinion on this.
Also the patch synopsis should be in the format of
<file/recipe>: synopsis
In this case it should:
relocate_sdk.py: Allow script to work with Python 2.4 and 3
Thanks
Sau!
> Signed-off-by: Konrad Scherer <Konrad.Scherer@windriver.com>
> ---
> scripts/relocate_sdk.py | 43 ++++++++++++++++++++++++++-----------------
> 1 file changed, 26 insertions(+), 17 deletions(-)
>
> diff --git a/scripts/relocate_sdk.py b/scripts/relocate_sdk.py
> index fe6e4e0..0971e63 100755
> --- a/scripts/relocate_sdk.py
> +++ b/scripts/relocate_sdk.py
> @@ -31,7 +31,15 @@ import os
> import re
> import errno
>
> -old_prefix = re.compile(b"##DEFAULT_INSTALL_DIR##")
> +if sys.version < '3':
> + def b(x):
> + return x
> +else:
> + import codecs
> + def b(x):
> + return codecs.latin_1_encode(x)[0]
> +
> +old_prefix = re.compile(b("##DEFAULT_INSTALL_DIR##"))
>
> def get_arch():
> f.seek(0)
> @@ -92,15 +100,15 @@ def change_interpreter(elf_file_name):
> # External SDKs with mixed pre-compiled binaries should not get
> # relocated so look for some variant of /lib
> fname = f.read(11)
> - if fname.startswith(b"/lib/") or fname.startswith(b"/lib64/") or \
> - fname.startswith(b"/lib32/") or fname.startswith(b"/usr/lib32/") or \
> - fname.startswith(b"/usr/lib32/") or fname.startswith(b"/usr/lib64/"):
> + if fname.startswith(b("/lib/")) or fname.startswith(b("/lib64/")) or \
> + fname.startswith(b("/lib32/")) or fname.startswith(b("/usr/lib32/")) or \
> + fname.startswith(b("/usr/lib32/")) or fname.startswith(b("/usr/lib64/")):
> break
> if (len(new_dl_path) >= p_filesz):
> print("ERROR: could not relocate %s, interp size = %i and %i is needed." \
> % (elf_file_name, p_memsz, len(new_dl_path) + 1))
> break
> - dl_path = new_dl_path + b"\0" * (p_filesz - len(new_dl_path))
> + dl_path = new_dl_path + b("\0") * (p_filesz - len(new_dl_path))
> f.seek(p_offset)
> f.write(dl_path)
> break
> @@ -132,40 +140,40 @@ def change_dl_sysdirs():
> sh_name, sh_type, sh_flags, sh_addr, sh_offset, sh_size, sh_link,\
> sh_info, sh_addralign, sh_entsize = struct.unpack(sh_fmt, sh_hdr)
>
> - name = sh_strtab[sh_name:sh_strtab.find(b"\0", sh_name)]
> + name = sh_strtab[sh_name:sh_strtab.find(b("\0"), sh_name)]
>
> """ look only into SHT_PROGBITS sections """
> if sh_type == 1:
> f.seek(sh_offset)
> """ default library paths cannot be changed on the fly because """
> """ the string lengths have to be changed too. """
> - if name == b".sysdirs":
> + if name == b(".sysdirs"):
> sysdirs = f.read(sh_size)
> sysdirs_off = sh_offset
> sysdirs_sect_size = sh_size
> - elif name == b".sysdirslen":
> + elif name == b(".sysdirslen"):
> sysdirslen = f.read(sh_size)
> sysdirslen_off = sh_offset
> - elif name == b".ldsocache":
> + elif name == b(".ldsocache"):
> ldsocache_path = f.read(sh_size)
> new_ldsocache_path = old_prefix.sub(new_prefix, ldsocache_path)
> # pad with zeros
> - new_ldsocache_path += b"\0" * (sh_size - len(new_ldsocache_path))
> + new_ldsocache_path += b("\0") * (sh_size - len(new_ldsocache_path))
> # write it back
> f.seek(sh_offset)
> f.write(new_ldsocache_path)
>
> if sysdirs != "" and sysdirslen != "":
> - paths = sysdirs.split(b"\0")
> - sysdirs = b""
> - sysdirslen = b""
> + paths = sysdirs.split(b("\0"))
> + sysdirs = b("")
> + sysdirslen = b("")
> for path in paths:
> """ exit the loop when we encounter first empty string """
> - if path == b"":
> + if path == b(""):
> break
>
> new_path = old_prefix.sub(new_prefix, path)
> - sysdirs += new_path + b"\0"
> + sysdirs += new_path + b("\0")
>
> if arch == 32:
> sysdirslen += struct.pack("<L", len(new_path))
> @@ -173,7 +181,7 @@ def change_dl_sysdirs():
> sysdirslen += struct.pack("<Q", len(new_path))
>
> """ pad with zeros """
> - sysdirs += b"\0" * (sysdirs_sect_size - len(sysdirs))
> + sysdirs += b("\0") * (sysdirs_sect_size - len(sysdirs))
>
> """ write the sections back """
> f.seek(sysdirs_off)
> @@ -205,7 +213,8 @@ for e in executables_list:
>
> try:
> f = open(e, "r+b")
> - except IOError as ioex:
> + except IOError:
> + exctype, ioex = sys.exc_info()[:2]
> if ioex.errno == errno.ETXTBSY:
> print("Could not open %s. File used by another process.\nPlease "\
> "make sure you exit all processes that might use any SDK "\
>
next prev parent reply other threads:[~2013-10-14 18:03 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-11 15:30 [Patch 0/1] Update relocate_sdk.py to work with Python 2.4 Konrad Scherer
2013-10-11 15:30 ` [PATCH] Allow script to work with Python 2.4 and 3 Konrad Scherer
2013-10-14 18:03 ` Saul Wold [this message]
2013-10-15 5:22 ` Laurentiu Palcu
2013-10-15 9:30 ` Burton, Ross
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=525C31DD.6020900@linux.intel.com \
--to=sgw@linux.intel.com \
--cc=konrad.scherer@windriver.com \
--cc=laurentiu.palcu@intel.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox