diff options
Diffstat (limited to '')
129 files changed, 1120 insertions, 1619 deletions
diff --git a/Android.mk b/Android.mk index 9a064f236..d21c18346 100644 --- a/Android.mk +++ b/Android.mk @@ -14,18 +14,20 @@ LOCAL_PATH := $(call my-dir) +# libfusesideload (static library) +# =============================== include $(CLEAR_VARS) LOCAL_SRC_FILES := fuse_sideload.cpp LOCAL_CLANG := true LOCAL_CFLAGS := -O2 -g -DADB_HOST=0 -Wall -Wno-unused-parameter LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE - LOCAL_MODULE := libfusesideload - LOCAL_STATIC_LIBRARIES := libcutils libc libcrypto_static include $(BUILD_STATIC_LIBRARY) +# recovery (static executable) +# =============================== include $(CLEAR_VARS) LOCAL_SRC_FILES := \ @@ -76,6 +78,7 @@ LOCAL_STATIC_LIBRARIES := \ libminui \ libpng \ libfs_mgr \ + libcrypto_utils_static \ libcrypto_static \ libbase \ libcutils \ @@ -131,7 +134,8 @@ LOCAL_CFLAGS := -Werror LOCAL_INIT_RC := recovery-refresh.rc include $(BUILD_EXECUTABLE) -# All the APIs for testing +# libverifier (static library) +# =============================== include $(CLEAR_VARS) LOCAL_CLANG := true LOCAL_MODULE := libverifier @@ -140,7 +144,7 @@ LOCAL_SRC_FILES := \ asn1_decoder.cpp \ verifier.cpp \ ui.cpp -LOCAL_STATIC_LIBRARIES := libcrypto_static +LOCAL_STATIC_LIBRARIES := libcrypto_utils_static libcrypto_static include $(BUILD_STATIC_LIBRARY) include $(LOCAL_PATH)/minui/Android.mk \ diff --git a/applypatch/Android.mk b/applypatch/Android.mk index 887a570db..a15ac0280 100644 --- a/applypatch/Android.mk +++ b/applypatch/Android.mk @@ -14,61 +14,88 @@ LOCAL_PATH := $(call my-dir) +# libapplypatch (static library) +# =============================== include $(CLEAR_VARS) - LOCAL_CLANG := true -LOCAL_SRC_FILES := applypatch.cpp bspatch.cpp freecache.cpp imgpatch.cpp utils.cpp +LOCAL_SRC_FILES := \ + applypatch.cpp \ + bspatch.cpp \ + freecache.cpp \ + imgpatch.cpp \ + utils.cpp LOCAL_MODULE := libapplypatch LOCAL_MODULE_TAGS := eng -LOCAL_C_INCLUDES += bootable/recovery -LOCAL_STATIC_LIBRARIES += libbase libotafault libmtdutils libcrypto_static libbz libz - +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/include \ + bootable/recovery +LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include +LOCAL_STATIC_LIBRARIES += \ + libotafault \ + libmtdutils \ + libbase \ + libcrypto_static \ + libbz \ + libz include $(BUILD_STATIC_LIBRARY) +# libimgpatch (static library) +# =============================== include $(CLEAR_VARS) - LOCAL_CLANG := true LOCAL_SRC_FILES := bspatch.cpp imgpatch.cpp utils.cpp LOCAL_MODULE := libimgpatch -LOCAL_C_INCLUDES += bootable/recovery +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/include \ + bootable/recovery LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include LOCAL_STATIC_LIBRARIES += libcrypto_static libbz libz - include $(BUILD_STATIC_LIBRARY) -ifeq ($(HOST_OS),linux) +# libimgpatch (host static library) +# =============================== include $(CLEAR_VARS) - LOCAL_CLANG := true LOCAL_SRC_FILES := bspatch.cpp imgpatch.cpp utils.cpp LOCAL_MODULE := libimgpatch -LOCAL_C_INCLUDES += bootable/recovery +LOCAL_MODULE_HOST_OS := linux +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/include \ + bootable/recovery LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include LOCAL_STATIC_LIBRARIES += libcrypto_static libbz libz - include $(BUILD_HOST_STATIC_LIBRARY) -endif # HOST_OS == linux +# applypatch (executable) +# =============================== include $(CLEAR_VARS) - LOCAL_CLANG := true LOCAL_SRC_FILES := main.cpp LOCAL_MODULE := applypatch LOCAL_C_INCLUDES += bootable/recovery -LOCAL_STATIC_LIBRARIES += libapplypatch libbase libotafault libmtdutils libcrypto_static libbz \ - libedify \ - +LOCAL_STATIC_LIBRARIES += \ + libapplypatch \ + libbase \ + libedify \ + libotafault \ + libminzip \ + libmtdutils \ + libcrypto_static \ + libbz LOCAL_SHARED_LIBRARIES += libz libcutils libc - include $(BUILD_EXECUTABLE) +# imgdiff (host static executable) +# =============================== include $(CLEAR_VARS) - LOCAL_CLANG := true -LOCAL_SRC_FILES := imgdiff.cpp utils.cpp bsdiff.cpp +LOCAL_SRC_FILES := imgdiff.cpp utils.cpp LOCAL_MODULE := imgdiff +LOCAL_STATIC_LIBRARIES += \ + libbsdiff \ + libbz \ + libdivsufsort64 \ + libdivsufsort \ + libz LOCAL_FORCE_STATIC_EXECUTABLE := true -LOCAL_C_INCLUDES += external/zlib external/bzip2 -LOCAL_STATIC_LIBRARIES += libz libbz - include $(BUILD_HOST_EXECUTABLE) diff --git a/applypatch/Makefile b/applypatch/Makefile new file mode 100644 index 000000000..fb4984303 --- /dev/null +++ b/applypatch/Makefile @@ -0,0 +1,33 @@ +# Copyright (C) 2016 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This file is for building imgdiff in Chrome OS. + +CPPFLAGS += -iquote.. -Iinclude +CXXFLAGS += -std=c++11 -O3 -Wall -Werror +LDLIBS += -lbz2 -lz + +.PHONY: all clean + +all: imgdiff libimgpatch.a + +clean: + rm -f *.o imgdiff libimgpatch.a + +imgdiff: imgdiff.o bsdiff.o utils.o + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDLIBS) -o $@ $^ + +libimgpatch.a utils.o: CXXFLAGS += -fPIC +libimgpatch.a: imgpatch.o bspatch.o utils.o + ${AR} rcs $@ $^ diff --git a/applypatch/applypatch.cpp b/applypatch/applypatch.cpp index 7985fc0c6..270fde5c4 100644 --- a/applypatch/applypatch.cpp +++ b/applypatch/applypatch.cpp @@ -31,7 +31,7 @@ #include <android-base/strings.h> #include "openssl/sha.h" -#include "applypatch.h" +#include "applypatch/applypatch.h" #include "mtdutils/mtdutils.h" #include "edify/expr.h" #include "ota_io.h" @@ -77,7 +77,7 @@ int LoadFileContents(const char* filename, FileContents* file) { size_t bytes_read = ota_fread(data.data(), 1, data.size(), f); if (bytes_read != data.size()) { - printf("short read of \"%s\" (%zu bytes of %zd)\n", filename, bytes_read, data.size()); + printf("short read of \"%s\" (%zu bytes of %zu)\n", filename, bytes_read, data.size()); ota_fclose(f); return -1; } @@ -596,7 +596,7 @@ size_t FreeSpaceForFile(const char* filename) { int CacheSizeCheck(size_t bytes) { if (MakeFreeSpaceOnCache(bytes) < 0) { - printf("unable to make %ld bytes available on /cache\n", (long)bytes); + printf("unable to make %zu bytes available on /cache\n", bytes); return 1; } else { return 0; @@ -897,7 +897,7 @@ static int GenerateTarget(FileContents* source_file, } else { // We write the decoded output to "<tgt-file>.patch". output_fd = ota_open(tmp_target_filename.c_str(), O_WRONLY | O_CREAT | O_TRUNC | O_SYNC, - S_IRUSR | S_IWUSR); + S_IRUSR | S_IWUSR); if (output_fd < 0) { printf("failed to open output file %s: %s\n", tmp_target_filename.c_str(), strerror(errno)); diff --git a/applypatch/bsdiff.cpp b/applypatch/bsdiff.cpp deleted file mode 100644 index 55dbe5cf1..000000000 --- a/applypatch/bsdiff.cpp +++ /dev/null @@ -1,410 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Most of this code comes from bsdiff.c from the bsdiff-4.3 - * distribution, which is: - */ - -/*- - * Copyright 2003-2005 Colin Percival - * All rights reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted providing that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/types.h> - -#include <bzlib.h> -#include <err.h> -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#define MIN(x,y) (((x)<(y)) ? (x) : (y)) - -static void split(off_t *I,off_t *V,off_t start,off_t len,off_t h) -{ - off_t i,j,k,x,tmp,jj,kk; - - if(len<16) { - for(k=start;k<start+len;k+=j) { - j=1;x=V[I[k]+h]; - for(i=1;k+i<start+len;i++) { - if(V[I[k+i]+h]<x) { - x=V[I[k+i]+h]; - j=0; - }; - if(V[I[k+i]+h]==x) { - tmp=I[k+j];I[k+j]=I[k+i];I[k+i]=tmp; - j++; - }; - }; - for(i=0;i<j;i++) V[I[k+i]]=k+j-1; - if(j==1) I[k]=-1; - }; - return; - }; - - x=V[I[start+len/2]+h]; - jj=0;kk=0; - for(i=start;i<start+len;i++) { - if(V[I[i]+h]<x) jj++; - if(V[I[i]+h]==x) kk++; - }; - jj+=start;kk+=jj; - - i=start;j=0;k=0; - while(i<jj) { - if(V[I[i]+h]<x) { - i++; - } else if(V[I[i]+h]==x) { - tmp=I[i];I[i]=I[jj+j];I[jj+j]=tmp; - j++; - } else { - tmp=I[i];I[i]=I[kk+k];I[kk+k]=tmp; - k++; - }; - }; - - while(jj+j<kk) { - if(V[I[jj+j]+h]==x) { - j++; - } else { - tmp=I[jj+j];I[jj+j]=I[kk+k];I[kk+k]=tmp; - k++; - }; - }; - - if(jj>start) split(I,V,start,jj-start,h); - - for(i=0;i<kk-jj;i++) V[I[jj+i]]=kk-1; - if(jj==kk-1) I[jj]=-1; - - if(start+len>kk) split(I,V,kk,start+len-kk,h); -} - -static void qsufsort(off_t *I,off_t *V,u_char *old,off_t oldsize) -{ - off_t buckets[256]; - off_t i,h,len; - - for(i=0;i<256;i++) buckets[i]=0; - for(i=0;i<oldsize;i++) buckets[old[i]]++; - for(i=1;i<256;i++) buckets[i]+=buckets[i-1]; - for(i=255;i>0;i--) buckets[i]=buckets[i-1]; - buckets[0]=0; - - for(i=0;i<oldsize;i++) I[++buckets[old[i]]]=i; - I[0]=oldsize; - for(i=0;i<oldsize;i++) V[i]=buckets[old[i]]; - V[oldsize]=0; - for(i=1;i<256;i++) if(buckets[i]==buckets[i-1]+1) I[buckets[i]]=-1; - I[0]=-1; - - for(h=1;I[0]!=-(oldsize+1);h+=h) { - len=0; - for(i=0;i<oldsize+1;) { - if(I[i]<0) { - len-=I[i]; - i-=I[i]; - } else { - if(len) I[i-len]=-len; - len=V[I[i]]+1-i; - split(I,V,i,len,h); - i+=len; - len=0; - }; - }; - if(len) I[i-len]=-len; - }; - - for(i=0;i<oldsize+1;i++) I[V[i]]=i; -} - -static off_t matchlen(u_char *olddata,off_t oldsize,u_char *newdata,off_t newsize) -{ - off_t i; - - for(i=0;(i<oldsize)&&(i<newsize);i++) - if(olddata[i]!=newdata[i]) break; - - return i; -} - -static off_t search(off_t *I,u_char *old,off_t oldsize, - u_char *newdata,off_t newsize,off_t st,off_t en,off_t *pos) -{ - off_t x,y; - - if(en-st<2) { - x=matchlen(old+I[st],oldsize-I[st],newdata,newsize); - y=matchlen(old+I[en],oldsize-I[en],newdata,newsize); - - if(x>y) { - *pos=I[st]; - return x; - } else { - *pos=I[en]; - return y; - } - }; - - x=st+(en-st)/2; - if(memcmp(old+I[x],newdata,MIN(oldsize-I[x],newsize))<0) { - return search(I,old,oldsize,newdata,newsize,x,en,pos); - } else { - return search(I,old,oldsize,newdata,newsize,st,x,pos); - }; -} - -static void offtout(off_t x,u_char *buf) -{ - off_t y; - - if(x<0) y=-x; else y=x; - - buf[0]=y%256;y-=buf[0]; - y=y/256;buf[1]=y%256;y-=buf[1]; - y=y/256;buf[2]=y%256;y-=buf[2]; - y=y/256;buf[3]=y%256;y-=buf[3]; - y=y/256;buf[4]=y%256;y-=buf[4]; - y=y/256;buf[5]=y%256;y-=buf[5]; - y=y/256;buf[6]=y%256;y-=buf[6]; - y=y/256;buf[7]=y%256; - - if(x<0) buf[7]|=0x80; -} - -// This is main() from bsdiff.c, with the following changes: -// -// - old, oldsize, newdata, newsize are arguments; we don't load this -// data from files. old and newdata are owned by the caller; we -// don't free them at the end. -// -// - the "I" block of memory is owned by the caller, who passes a -// pointer to *I, which can be NULL. This way if we call -// bsdiff() multiple times with the same 'old' data, we only do -// the qsufsort() step the first time. -// -int bsdiff(u_char* old, off_t oldsize, off_t** IP, u_char* newdata, off_t newsize, - const char* patch_filename) -{ - int fd; - off_t *I; - off_t scan,pos,len; - off_t lastscan,lastpos,lastoffset; - off_t oldscore,scsc; - off_t s,Sf,lenf,Sb,lenb; - off_t overlap,Ss,lens; - off_t i; - off_t dblen,eblen; - u_char *db,*eb; - u_char buf[8]; - u_char header[32]; - FILE * pf; - BZFILE * pfbz2; - int bz2err; - - if (*IP == NULL) { - off_t* V; - *IP = reinterpret_cast<off_t*>(malloc((oldsize+1) * sizeof(off_t))); - V = reinterpret_cast<off_t*>(malloc((oldsize+1) * sizeof(off_t))); - qsufsort(*IP, V, old, oldsize); - free(V); - } - I = *IP; - - if(((db=reinterpret_cast<u_char*>(malloc(newsize+1)))==NULL) || - ((eb=reinterpret_cast<u_char*>(malloc(newsize+1)))==NULL)) err(1,NULL); - dblen=0; - eblen=0; - - /* Create the patch file */ - if ((pf = fopen(patch_filename, "w")) == NULL) - err(1, "%s", patch_filename); - - /* Header is - 0 8 "BSDIFF40" - 8 8 length of bzip2ed ctrl block - 16 8 length of bzip2ed diff block - 24 8 length of new file */ - /* File is - 0 32 Header - 32 ?? Bzip2ed ctrl block - ?? ?? Bzip2ed diff block - ?? ?? Bzip2ed extra block */ - memcpy(header,"BSDIFF40",8); - offtout(0, header + 8); - offtout(0, header + 16); - offtout(newsize, header + 24); - if (fwrite(header, 32, 1, pf) != 1) - err(1, "fwrite(%s)", patch_filename); - - /* Compute the differences, writing ctrl as we go */ - if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL) - errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err); - scan=0;len=0; - lastscan=0;lastpos=0;lastoffset=0; - while(scan<newsize) { - oldscore=0; - - for(scsc=scan+=len;scan<newsize;scan++) { - len=search(I,old,oldsize,newdata+scan,newsize-scan, - 0,oldsize,&pos); - - for(;scsc<scan+len;scsc++) - if((scsc+lastoffset<oldsize) && - (old[scsc+lastoffset] == newdata[scsc])) - oldscore++; - - if(((len==oldscore) && (len!=0)) || - (len>oldscore+8)) break; - - if((scan+lastoffset<oldsize) && - (old[scan+lastoffset] == newdata[scan])) - oldscore--; - }; - - if((len!=oldscore) || (scan==newsize)) { - s=0;Sf=0;lenf=0; - for(i=0;(lastscan+i<scan)&&(lastpos+i<oldsize);) { - if(old[lastpos+i]==newdata[lastscan+i]) s++; - i++; - if(s*2-i>Sf*2-lenf) { Sf=s; lenf=i; }; - }; - - lenb=0; - if(scan<newsize) { - s=0;Sb=0; - for(i=1;(scan>=lastscan+i)&&(pos>=i);i++) { - if(old[pos-i]==newdata[scan-i]) s++; - if(s*2-i>Sb*2-lenb) { Sb=s; lenb=i; }; - }; - }; - - if(lastscan+lenf>scan-lenb) { - overlap=(lastscan+lenf)-(scan-lenb); - s=0;Ss=0;lens=0; - for(i=0;i<overlap;i++) { - if(newdata[lastscan+lenf-overlap+i]== - old[lastpos+lenf-overlap+i]) s++; - if(newdata[scan-lenb+i]== - old[pos-lenb+i]) s--; - if(s>Ss) { Ss=s; lens=i+1; }; - }; - - lenf+=lens-overlap; - lenb-=lens; - }; - - for(i=0;i<lenf;i++) - db[dblen+i]=newdata[lastscan+i]-old[lastpos+i]; - for(i=0;i<(scan-lenb)-(lastscan+lenf);i++) - eb[eblen+i]=newdata[lastscan+lenf+i]; - - dblen+=lenf; - eblen+=(scan-lenb)-(lastscan+lenf); - - offtout(lenf,buf); - BZ2_bzWrite(&bz2err, pfbz2, buf, 8); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWrite, bz2err = %d", bz2err); - - offtout((scan-lenb)-(lastscan+lenf),buf); - BZ2_bzWrite(&bz2err, pfbz2, buf, 8); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWrite, bz2err = %d", bz2err); - - offtout((pos-lenb)-(lastpos+lenf),buf); - BZ2_bzWrite(&bz2err, pfbz2, buf, 8); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWrite, bz2err = %d", bz2err); - - lastscan=scan-lenb; - lastpos=pos-lenb; - lastoffset=pos-scan; - }; - }; - BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err); - - /* Compute size of compressed ctrl data */ - if ((len = ftello(pf)) == -1) - err(1, "ftello"); - offtout(len-32, header + 8); - - /* Write compressed diff data */ - if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL) - errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err); - BZ2_bzWrite(&bz2err, pfbz2, db, dblen); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWrite, bz2err = %d", bz2err); - BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err); - - /* Compute size of compressed diff data */ - if ((newsize = ftello(pf)) == -1) - err(1, "ftello"); - offtout(newsize - len, header + 16); - - /* Write compressed extra data */ - if ((pfbz2 = BZ2_bzWriteOpen(&bz2err, pf, 9, 0, 0)) == NULL) - errx(1, "BZ2_bzWriteOpen, bz2err = %d", bz2err); - BZ2_bzWrite(&bz2err, pfbz2, eb, eblen); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWrite, bz2err = %d", bz2err); - BZ2_bzWriteClose(&bz2err, pfbz2, 0, NULL, NULL); - if (bz2err != BZ_OK) - errx(1, "BZ2_bzWriteClose, bz2err = %d", bz2err); - - /* Seek to the beginning, write the header, and close the file */ - if (fseeko(pf, 0, SEEK_SET)) - err(1, "fseeko"); - if (fwrite(header, 32, 1, pf) != 1) - err(1, "fwrite(%s)", patch_filename); - if (fclose(pf)) - err(1, "fclose"); - - /* Free the memory we used */ - free(db); - free(eb); - - return 0; -} diff --git a/applypatch/bspatch.cpp b/applypatch/bspatch.cpp index ebb55f1d1..a4945da28 100644 --- a/applypatch/bspatch.cpp +++ b/applypatch/bspatch.cpp @@ -30,7 +30,7 @@ #include <bzlib.h> #include "openssl/sha.h" -#include "applypatch.h" +#include "applypatch/applypatch.h" void ShowBSDiffLicense() { puts("The bsdiff library used herein is:\n" @@ -182,7 +182,6 @@ int ApplyBSDiffPatchMem(const unsigned char* old_data, ssize_t old_size, off_t oldpos = 0, newpos = 0; off_t ctrl[3]; - off_t len_read; int i; unsigned char buf[24]; while (newpos < new_size) { diff --git a/applypatch/freecache.cpp b/applypatch/freecache.cpp index c84f42797..331cae265 100644 --- a/applypatch/freecache.cpp +++ b/applypatch/freecache.cpp @@ -32,7 +32,7 @@ #include <android-base/parseint.h> #include <android-base/stringprintf.h> -#include "applypatch.h" +#include "applypatch/applypatch.h" static int EliminateOpenFiles(std::set<std::string>* files) { std::unique_ptr<DIR, decltype(&closedir)> d(opendir("/proc"), closedir); diff --git a/applypatch/imgdiff.cpp b/applypatch/imgdiff.cpp index f22502e38..7c5bb866d 100644 --- a/applypatch/imgdiff.cpp +++ b/applypatch/imgdiff.cpp @@ -130,6 +130,8 @@ #include <unistd.h> #include <sys/types.h> +#include <bsdiff.h> + #include "zlib.h" #include "imgdiff.h" #include "utils.h" @@ -144,8 +146,6 @@ typedef struct { size_t source_start; size_t source_len; - off_t* I; // used by bsdiff - // --- for CHUNK_DEFLATE chunks only: --- // original (compressed) deflate data @@ -179,10 +179,6 @@ static int fileentry_compare(const void* a, const void* b) { } } -// from bsdiff.c -int bsdiff(u_char* old, off_t oldsize, off_t** IP, u_char* newdata, off_t newsize, - const char* patch_filename); - unsigned char* ReadZip(const char* filename, int* num_chunks, ImageChunk** chunks, int include_pseudo_chunk) { @@ -296,7 +292,6 @@ unsigned char* ReadZip(const char* filename, curr->len = st.st_size; curr->data = img; curr->filename = NULL; - curr->I = NULL; ++curr; ++*num_chunks; } @@ -311,7 +306,6 @@ unsigned char* ReadZip(const char* filename, curr->deflate_len = temp_entries[nextentry].deflate_len; curr->deflate_data = img + pos; curr->filename = temp_entries[nextentry].filename; - curr->I = NULL; curr->len = temp_entries[nextentry].uncomp_len; curr->data = reinterpret_cast<unsigned char*>(malloc(curr->len)); @@ -356,7 +350,6 @@ unsigned char* ReadZip(const char* filename, } curr->data = img + pos; curr->filename = NULL; - curr->I = NULL; pos += curr->len; ++*num_chunks; @@ -407,7 +400,6 @@ unsigned char* ReadImage(const char* filename, while (pos < sz) { unsigned char* p = img+pos; - bool processed_deflate = false; if (sz - pos >= 4 && p[0] == 0x1f && p[1] == 0x8b && p[2] == 0x08 && // deflate compression @@ -425,7 +417,6 @@ unsigned char* ReadImage(const char* filename, curr->type = CHUNK_NORMAL; curr->len = GZIP_HEADER_LEN; curr->data = p; - curr->I = NULL; pos += curr->len; p += curr->len; @@ -433,7 +424,6 @@ unsigned char* ReadImage(const char* filename, curr->type = CHUNK_DEFLATE; curr->filename = NULL; - curr->I = NULL; // We must decompress this chunk in order to discover where it // ends, and so we can put the uncompressed data and its length @@ -461,28 +451,27 @@ unsigned char* ReadImage(const char* filename, strm.next_out = curr->data + curr->len; ret = inflate(&strm, Z_NO_FLUSH); if (ret < 0) { - if (!processed_deflate) { - // This is the first chunk, assume that it's just a spurious - // gzip header instead of a real one. - break; - } - printf("Error: inflate failed [%s] at file offset [%zu]\n" - "imgdiff only supports gzip kernel compression," - " did you try CONFIG_KERNEL_LZO?\n", + printf("Warning: inflate failed [%s] at offset [%zu]," + " treating as a normal chunk\n", strm.msg, chunk_offset); - free(img); - return NULL; + break; } curr->len = allocated - strm.avail_out; if (strm.avail_out == 0) { allocated *= 2; curr->data = reinterpret_cast<unsigned char*>(realloc(curr->data, allocated)); } - processed_deflate = true; } while (ret != Z_STREAM_END); curr->deflate_len = sz - strm.avail_in - pos; inflateEnd(&strm); + + if (ret < 0) { + free(curr->data); + *num_chunks -= 2; + continue; + } + pos += curr->deflate_len; p += curr->deflate_len; ++curr; @@ -493,7 +482,6 @@ unsigned char* ReadImage(const char* filename, curr->start = pos; curr->len = GZIP_FOOTER_LEN; curr->data = img+pos; - curr->I = NULL; pos += curr->len; p += curr->len; @@ -517,7 +505,6 @@ unsigned char* ReadImage(const char* filename, *chunks = reinterpret_cast<ImageChunk*>(realloc(*chunks, *num_chunks * sizeof(ImageChunk))); ImageChunk* curr = *chunks + (*num_chunks-1); curr->start = pos; - curr->I = NULL; // 'pos' is not the offset of the start of a gzip chunk, so scan // forward until we find a gzip header. @@ -598,7 +585,6 @@ int ReconstructDeflateChunk(ImageChunk* chunk) { return -1; } - size_t p = 0; unsigned char* out = reinterpret_cast<unsigned char*>(malloc(BUFFER_SIZE)); // We only check two combinations of encoder parameters: level 6 @@ -645,7 +631,7 @@ unsigned char* MakePatch(ImageChunk* src, ImageChunk* tgt, size_t* size) { close(fd); // temporary file is created and we don't need its file // descriptor - int r = bsdiff(src->data, src->len, &(src->I), tgt->data, tgt->len, ptemp); + int r = bsdiff::bsdiff(src->data, src->len, tgt->data, tgt->len, ptemp); if (r != 0) { printf("bsdiff() failed: %d\n", r); return NULL; @@ -844,7 +830,6 @@ int main(int argc, char** argv) { } if (argc != 4) { - usage: printf("usage: %s [-z] [-b <bonus-file>] <src-img> <tgt-img> <patch-file>\n", argv[0]); return 2; diff --git a/applypatch/imgpatch.cpp b/applypatch/imgpatch.cpp index 8824038ea..f5aed763d 100644 --- a/applypatch/imgpatch.cpp +++ b/applypatch/imgpatch.cpp @@ -28,7 +28,7 @@ #include "zlib.h" #include "openssl/sha.h" -#include "applypatch.h" +#include "applypatch/applypatch.h" #include "imgdiff.h" #include "utils.h" @@ -130,6 +130,7 @@ int ApplyImagePatch(const unsigned char* old_data, ssize_t old_size, size_t src_len = Read8(deflate_header+8); size_t patch_offset = Read8(deflate_header+16); size_t expanded_len = Read8(deflate_header+24); + size_t target_len = Read8(deflate_header+32); int level = Read4(deflate_header+40); int method = Read4(deflate_header+44); int windowBits = Read4(deflate_header+48); @@ -195,6 +196,11 @@ int ApplyImagePatch(const unsigned char* old_data, ssize_t old_size, &uncompressed_target_data) != 0) { return -1; } + if (uncompressed_target_data.size() != target_len) { + printf("expected target len to be %zu, but it's %zu\n", + target_len, uncompressed_target_data.size()); + return -1; + } // Now compress the target data and append it to the output. @@ -223,8 +229,8 @@ int ApplyImagePatch(const unsigned char* old_data, ssize_t old_size, ssize_t have = temp_data.size() - strm.avail_out; if (sink(temp_data.data(), have, token) != have) { - printf("failed to write %ld compressed bytes to output\n", - (long)have); + printf("failed to write %zd compressed bytes to output\n", + have); return -1; } if (ctx) SHA1_Update(ctx, temp_data.data(), have); diff --git a/applypatch/applypatch.h b/applypatch/include/applypatch/applypatch.h index f392c5534..9ee39d293 100644 --- a/applypatch/applypatch.h +++ b/applypatch/include/applypatch/applypatch.h @@ -17,6 +17,7 @@ #ifndef _APPLYPATCH_H #define _APPLYPATCH_H +#include <stdint.h> #include <sys/stat.h> #include <vector> diff --git a/applypatch/libimgpatch.pc b/applypatch/libimgpatch.pc new file mode 100644 index 000000000..e5002934f --- /dev/null +++ b/applypatch/libimgpatch.pc @@ -0,0 +1,6 @@ +# This file is for libimgpatch in Chrome OS. + +Name: libimgpatch +Description: Apply imgdiff patch +Version: 0.0.1 +Libs: -limgpatch -lbz2 -lz diff --git a/applypatch/main.cpp b/applypatch/main.cpp index 9013760c4..0ff8cbf9a 100644 --- a/applypatch/main.cpp +++ b/applypatch/main.cpp @@ -22,7 +22,7 @@ #include <memory> #include <vector> -#include "applypatch.h" +#include "applypatch/applypatch.h" #include "edify/expr.h" #include "openssl/sha.h" diff --git a/applypatch/utils.cpp b/applypatch/utils.cpp index 4a80be75f..fef250f01 100644 --- a/applypatch/utils.cpp +++ b/applypatch/utils.cpp @@ -27,7 +27,7 @@ void Write4(int value, FILE* f) { } /** Write an 8-byte value to f in little-endian order. */ -void Write8(long long value, FILE* f) { +void Write8(int64_t value, FILE* f) { fputc(value & 0xff, f); fputc((value >> 8) & 0xff, f); fputc((value >> 16) & 0xff, f); @@ -52,14 +52,14 @@ int Read4(void* pv) { (unsigned int)p[0]); } -long long Read8(void* pv) { +int64_t Read8(void* pv) { unsigned char* p = reinterpret_cast<unsigned char*>(pv); - return (long long)(((unsigned long long)p[7] << 56) | - ((unsigned long long)p[6] << 48) | - ((unsigned long long)p[5] << 40) | - ((unsigned long long)p[4] << 32) | - ((unsigned long long)p[3] << 24) | - ((unsigned long long)p[2] << 16) | - ((unsigned long long)p[1] << 8) | - (unsigned long long)p[0]); + return (int64_t)(((uint64_t)p[7] << 56) | + ((uint64_t)p[6] << 48) | + ((uint64_t)p[5] << 40) | + ((uint64_t)p[4] << 32) | + ((uint64_t)p[3] << 24) | + ((uint64_t)p[2] << 16) | + ((uint64_t)p[1] << 8) | + (uint64_t)p[0]); } diff --git a/applypatch/utils.h b/applypatch/utils.h index bc97f1720..1c34edd97 100644 --- a/applypatch/utils.h +++ b/applypatch/utils.h @@ -17,14 +17,15 @@ #ifndef _BUILD_TOOLS_APPLYPATCH_UTILS_H #define _BUILD_TOOLS_APPLYPATCH_UTILS_H +#include <inttypes.h> #include <stdio.h> // Read and write little-endian values of various sizes. void Write4(int value, FILE* f); -void Write8(long long value, FILE* f); +void Write8(int64_t value, FILE* f); int Read2(void* p); int Read4(void* p); -long long Read8(void* p); +int64_t Read8(void* p); #endif // _BUILD_TOOLS_APPLYPATCH_UTILS_H diff --git a/bootloader.cpp b/bootloader.cpp index d80c5e793..a32f8b4c6 100644 --- a/bootloader.cpp +++ b/bootloader.cpp @@ -29,7 +29,7 @@ #include "common.h" #include "mtdutils/mtdutils.h" #include "roots.h" -#include "unique_fd.h" +#include <android-base/unique_fd.h> static int get_bootloader_message_mtd(bootloader_message* out, const Volume* v); static int set_bootloader_message_mtd(const bootloader_message* in, const Volume* v); @@ -191,8 +191,8 @@ static int get_bootloader_message_block(bootloader_message* out, static int set_bootloader_message_block(const bootloader_message* in, const Volume* v) { wait_for_device(v->blk_device); - unique_fd fd(open(v->blk_device, O_WRONLY | O_SYNC)); - if (fd.get() == -1) { + android::base::unique_fd fd(open(v->blk_device, O_WRONLY | O_SYNC)); + if (fd == -1) { LOGE("failed to open \"%s\": %s\n", v->blk_device, strerror(errno)); return -1; } @@ -201,7 +201,7 @@ static int set_bootloader_message_block(const bootloader_message* in, const uint8_t* start = reinterpret_cast<const uint8_t*>(in); size_t total = sizeof(*in); while (written < total) { - ssize_t wrote = TEMP_FAILURE_RETRY(write(fd.get(), start + written, total - written)); + ssize_t wrote = TEMP_FAILURE_RETRY(write(fd, start + written, total - written)); if (wrote == -1) { LOGE("failed to write %" PRId64 " bytes: %s\n", static_cast<off64_t>(written), strerror(errno)); @@ -210,7 +210,7 @@ static int set_bootloader_message_block(const bootloader_message* in, written += wrote; } - if (fsync(fd.get()) == -1) { + if (fsync(fd) == -1) { LOGE("failed to fsync \"%s\": %s\n", v->blk_device, strerror(errno)); return -1; } diff --git a/bootloader.h b/bootloader.h index 742a4abfb..de5351851 100644 --- a/bootloader.h +++ b/bootloader.h @@ -45,7 +45,8 @@ * commandline parameter. This is used by fs_mgr to mount /system and * other partitions with the slotselect flag set in fstab. A/B * implementations are free to use all 32 bytes and may store private - * data past the first NUL-byte in this field. + * data past the first NUL-byte in this field. It is encouraged, but + * not mandatory, to use 'struct bootloader_control' described below. */ struct bootloader_message { char command[32]; @@ -62,6 +63,60 @@ struct bootloader_message { char reserved[192]; }; +#define BOOT_CTRL_MAGIC 0x42414342 /* Bootloader Control AB */ +#define BOOT_CTRL_VERSION 1 + +struct slot_metadata { + // Slot priority with 15 meaning highest priority, 1 lowest + // priority and 0 the slot is unbootable. + uint8_t priority : 4; + // Number of times left attempting to boot this slot. + uint8_t tries_remaining : 3; + // 1 if this slot has booted successfully, 0 otherwise. + uint8_t successful_boot : 1; + // 1 if this slot is corrupted from a dm-verity corruption, 0 + // otherwise. + uint8_t verity_corrupted : 1; + // Reserved for further use. + uint8_t reserved : 7; +} __attribute__((packed)); + +/* Bootloader Control AB + * + * This struct can be used to manage A/B metadata. It is designed to + * be put in the 'slot_suffix' field of the 'bootloader_message' + * structure described above. It is encouraged to use the + * 'bootloader_control' structure to store the A/B metadata, but not + * mandatory. + */ +struct bootloader_control { + // NUL terminated active slot suffix. + char slot_suffix[4]; + // Bootloader Control AB magic number (see BOOT_CTRL_MAGIC). + uint32_t magic; + // Version of struct being used (see BOOT_CTRL_VERSION). + uint8_t version; + // Number of slots being managed. + uint8_t nb_slot : 3; + // Number of times left attempting to boot recovery. + uint8_t recovery_tries_remaining : 3; + // Ensure 4-bytes alignment for slot_info field. + uint8_t reserved0[2]; + // Per-slot information. Up to 4 slots. + struct slot_metadata slot_info[4]; + // Reserved for further use. + uint8_t reserved1[8]; + // CRC32 of all 28 bytes preceding this field (little endian + // format). + uint32_t crc32_le; +} __attribute__((packed)); + +#if (__STDC_VERSION__ >= 201112L) +_Static_assert(sizeof(struct bootloader_control) == + sizeof(((struct bootloader_message *)0)->slot_suffix), + "struct bootloader_control has wrong size"); +#endif + /* Read and write the bootloader command from the "misc" partition. * These return zero on success. */ diff --git a/edify/expr.cpp b/edify/expr.cpp index cc14fbe93..ecb1bea1a 100644 --- a/edify/expr.cpp +++ b/edify/expr.cpp @@ -291,13 +291,14 @@ Value* LessThanIntFn(const char* name, State* state, int argc, Expr* argv[]) { bool result = false; char* end; - long l_int = strtol(left, &end, 10); + // Parse up to at least long long or 64-bit integers. + int64_t l_int = static_cast<int64_t>(strtoll(left, &end, 10)); if (left[0] == '\0' || *end != '\0') { goto done; } - long r_int; - r_int = strtol(right, &end, 10); + int64_t r_int; + r_int = static_cast<int64_t>(strtoll(right, &end, 10)); if (right[0] == '\0' || *end != '\0') { goto done; } diff --git a/install.cpp b/install.cpp index d5c558306..190d8525b 100644 --- a/install.cpp +++ b/install.cpp @@ -134,13 +134,13 @@ try_update_binary(const char* path, ZipArchive* zip, bool* wipe_cache, // update attempt. // - const char** args = (const char**)malloc(sizeof(char*) * 6); + const char* args[6]; args[0] = binary; args[1] = EXPAND(RECOVERY_API_VERSION); // defined in Android.mk - char* temp = (char*)malloc(10); - sprintf(temp, "%d", pipefd[1]); + char temp[16]; + snprintf(temp, sizeof(temp), "%d", pipefd[1]); args[2] = temp; - args[3] = (char*)path; + args[3] = path; args[4] = retry_count > 0 ? "retry" : NULL; args[5] = NULL; @@ -148,7 +148,7 @@ try_update_binary(const char* path, ZipArchive* zip, bool* wipe_cache, if (pid == 0) { umask(022); close(pipefd[0]); - execv(binary, (char* const*)args); + execv(binary, const_cast<char**>(args)); fprintf(stdout, "E:Can't run %s (%s)\n", binary, strerror(errno)); _exit(-1); } diff --git a/minui/events.cpp b/minui/events.cpp index 3b2262a4b..a6b9671ed 100644 --- a/minui/events.cpp +++ b/minui/events.cpp @@ -49,7 +49,7 @@ static unsigned ev_count = 0; static unsigned ev_dev_count = 0; static unsigned ev_misc_count = 0; -static bool test_bit(size_t bit, unsigned long* array) { +static bool test_bit(size_t bit, unsigned long* array) { // NOLINT return (array[bit/BITS_PER_LONG] & (1UL << (bit % BITS_PER_LONG))) != 0; } @@ -65,7 +65,8 @@ int ev_init(ev_callback input_cb, void* data) { if (dir != NULL) { dirent* de; while ((de = readdir(dir))) { - unsigned long ev_bits[BITS_TO_LONGS(EV_MAX)]; + // Use unsigned long to match ioctl's parameter type. + unsigned long ev_bits[BITS_TO_LONGS(EV_MAX)]; // NOLINT // fprintf(stderr,"/dev/input/%s\n", de->d_name); if (strncmp(de->d_name, "event", 5)) continue; @@ -175,8 +176,9 @@ int ev_get_input(int fd, uint32_t epevents, input_event* ev) { } int ev_sync_key_state(ev_set_key_callback set_key_cb, void* data) { - unsigned long ev_bits[BITS_TO_LONGS(EV_MAX)]; - unsigned long key_bits[BITS_TO_LONGS(KEY_MAX)]; + // Use unsigned long to match ioctl's parameter type. + unsigned long ev_bits[BITS_TO_LONGS(EV_MAX)]; // NOLINT + unsigned long key_bits[BITS_TO_LONGS(KEY_MAX)]; // NOLINT for (size_t i = 0; i < ev_dev_count; ++i) { memset(ev_bits, 0, sizeof(ev_bits)); @@ -203,8 +205,9 @@ int ev_sync_key_state(ev_set_key_callback set_key_cb, void* data) { } void ev_iterate_available_keys(std::function<void(int)> f) { - unsigned long ev_bits[BITS_TO_LONGS(EV_MAX)]; - unsigned long key_bits[BITS_TO_LONGS(KEY_MAX)]; + // Use unsigned long to match ioctl's parameter type. + unsigned long ev_bits[BITS_TO_LONGS(EV_MAX)]; // NOLINT + unsigned long key_bits[BITS_TO_LONGS(KEY_MAX)]; // NOLINT for (size_t i = 0; i < ev_dev_count; ++i) { memset(ev_bits, 0, sizeof(ev_bits)); diff --git a/minui/graphics_adf.cpp b/minui/graphics_adf.cpp index 5d0867f58..a72e40b58 100644 --- a/minui/graphics_adf.cpp +++ b/minui/graphics_adf.cpp @@ -42,6 +42,8 @@ struct adf_pdata { adf_id_t eng_id; __u32 format; + adf_device dev; + unsigned int current_surface; unsigned int n_surfaces; adf_surface_pdata surfaces[2]; @@ -163,21 +165,20 @@ static GRSurface* adf_init(minui_backend *backend) pdata->intf_fd = -1; for (i = 0; i < n_dev_ids && pdata->intf_fd < 0; i++) { - adf_device dev; - int err = adf_device_open(dev_ids[i], O_RDWR, &dev); + int err = adf_device_open(dev_ids[i], O_RDWR, &pdata->dev); if (err < 0) { fprintf(stderr, "opening adf device %u failed: %s\n", dev_ids[i], strerror(-err)); continue; } - err = adf_device_init(pdata, &dev); - if (err < 0) + err = adf_device_init(pdata, &pdata->dev); + if (err < 0) { fprintf(stderr, "initializing adf device %u failed: %s\n", dev_ids[i], strerror(-err)); - - adf_device_close(&dev); + adf_device_close(&pdata->dev); + } } free(dev_ids); @@ -226,6 +227,7 @@ static void adf_exit(minui_backend *backend) adf_pdata *pdata = (adf_pdata *)backend; unsigned int i; + adf_device_close(&pdata->dev); for (i = 0; i < pdata->n_surfaces; i++) adf_surface_destroy(&pdata->surfaces[i]); if (pdata->intf_fd >= 0) diff --git a/minui/resources.cpp b/minui/resources.cpp index 40d3c2c88..730b05f13 100644 --- a/minui/resources.cpp +++ b/minui/resources.cpp @@ -28,6 +28,7 @@ #include <linux/fb.h> #include <linux/kd.h> +#include <vector> #include <png.h> #include "minui.h" @@ -280,7 +281,7 @@ int res_create_multi_display_surface(const char* name, int* frames, int* fps, goto exit; } - surface = reinterpret_cast<GRSurface**>(malloc(*frames * sizeof(GRSurface*))); + surface = reinterpret_cast<GRSurface**>(calloc(*frames, sizeof(GRSurface*))); if (surface == NULL) { result = -8; goto exit; @@ -315,7 +316,7 @@ exit: if (result < 0) { if (surface) { for (int i = 0; i < *frames; ++i) { - if (surface[i]) free(surface[i]); + free(surface[i]); } free(surface); } @@ -391,18 +392,13 @@ int res_create_localized_alpha_surface(const char* name, png_infop info_ptr = NULL; png_uint_32 width, height; png_byte channels; - unsigned char* row; png_uint_32 y; + std::vector<unsigned char> row; *pSurface = NULL; if (locale == NULL) { - surface = malloc_surface(0); - surface->width = 0; - surface->height = 0; - surface->row_bytes = 0; - surface->pixel_bytes = 1; - goto exit; + return result; } result = open_png(name, &png_ptr, &info_ptr, &width, &height, &channels); @@ -413,13 +409,13 @@ int res_create_localized_alpha_surface(const char* name, goto exit; } - row = reinterpret_cast<unsigned char*>(malloc(width)); + row.resize(width); for (y = 0; y < height; ++y) { - png_read_row(png_ptr, row, NULL); + png_read_row(png_ptr, row.data(), NULL); int w = (row[1] << 8) | row[0]; int h = (row[3] << 8) | row[2]; - int len = row[4]; - char* loc = (char*)row+5; + __unused int len = row[4]; + char* loc = reinterpret_cast<char*>(&row[5]); if (y+1+h >= height || matches_locale(loc, locale)) { printf(" %20s: %s (%d x %d @ %d)\n", name, loc, w, h, y); @@ -436,8 +432,8 @@ int res_create_localized_alpha_surface(const char* name, int i; for (i = 0; i < h; ++i, ++y) { - png_read_row(png_ptr, row, NULL); - memcpy(surface->data + i*w, row, w); + png_read_row(png_ptr, row.data(), NULL); + memcpy(surface->data + i*w, row.data(), w); } *pSurface = reinterpret_cast<GRSurface*>(surface); @@ -445,7 +441,7 @@ int res_create_localized_alpha_surface(const char* name, } else { int i; for (i = 0; i < h; ++i, ++y) { - png_read_row(png_ptr, row, NULL); + png_read_row(png_ptr, row.data(), NULL); } } } diff --git a/minzip/Android.mk b/minzip/Android.mk index 22eabfbb1..3d36fd64e 100644 --- a/minzip/Android.mk +++ b/minzip/Android.mk @@ -4,7 +4,7 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := \ Hash.c \ SysUtil.c \ - DirUtil.c \ + DirUtil.cpp \ Inlines.c \ Zip.c diff --git a/minzip/DirUtil.c b/minzip/DirUtil.cpp index 97cb2e0ee..e08e360c0 100644 --- a/minzip/DirUtil.c +++ b/minzip/DirUtil.cpp @@ -14,6 +14,8 @@ * limitations under the License. */ +#include "DirUtil.h" + #include <stdlib.h> #include <string.h> #include <stdio.h> @@ -24,7 +26,10 @@ #include <dirent.h> #include <limits.h> -#include "DirUtil.h" +#include <string> + +#include <selinux/label.h> +#include <selinux/selinux.h> typedef enum { DMISSING, DDIR, DILLEGAL } DirStatus; @@ -66,43 +71,25 @@ dirCreateHierarchy(const char *path, int mode, errno = ENOENT; return -1; } - - /* Allocate a path that we can modify; stick a slash on - * the end to make things easier. - */ - size_t pathLen = strlen(path); - char *cpath = (char *)malloc(pathLen + 2); - if (cpath == NULL) { - errno = ENOMEM; - return -1; - } - memcpy(cpath, path, pathLen); + // Allocate a path that we can modify; stick a slash on + // the end to make things easier. + std::string cpath = path; if (stripFileName) { - /* Strip everything after the last slash. - */ - char *c = cpath + pathLen - 1; - while (c != cpath && *c != '/') { - c--; - } - if (c == cpath) { - //xxx test this path - /* No directory component. Act like the path was empty. - */ + // Strip everything after the last slash. + size_t pos = cpath.rfind('/'); + if (pos == std::string::npos) { errno = ENOENT; - free(cpath); return -1; } - c[1] = '\0'; // Terminate after the slash we found. + cpath.resize(pos + 1); } else { - /* Make sure that the path ends in a slash. - */ - cpath[pathLen] = '/'; - cpath[pathLen + 1] = '\0'; + // Make sure that the path ends in a slash. + cpath.push_back('/'); } /* See if it already exists. */ - ds = getPathDirStatus(cpath); + ds = getPathDirStatus(cpath.c_str()); if (ds == DDIR) { return 0; } else if (ds == DILLEGAL) { @@ -112,7 +99,8 @@ dirCreateHierarchy(const char *path, int mode, /* Walk up the path from the root and make each level. * If a directory already exists, no big deal. */ - char *p = cpath; + const char *path_start = &cpath[0]; + char *p = &cpath[0]; while (*p != '\0') { /* Skip any slashes, watching out for the end of the string. */ @@ -135,12 +123,11 @@ dirCreateHierarchy(const char *path, int mode, /* Check this part of the path and make a new directory * if necessary. */ - ds = getPathDirStatus(cpath); + ds = getPathDirStatus(path_start); if (ds == DILLEGAL) { /* Could happen if some other process/thread is * messing with the filesystem. */ - free(cpath); return -1; } else if (ds == DMISSING) { int err; @@ -148,11 +135,11 @@ dirCreateHierarchy(const char *path, int mode, char *secontext = NULL; if (sehnd) { - selabel_lookup(sehnd, &secontext, cpath, mode); + selabel_lookup(sehnd, &secontext, path_start, mode); setfscreatecon(secontext); } - err = mkdir(cpath, mode); + err = mkdir(path_start, mode); if (secontext) { freecon(secontext); @@ -160,22 +147,17 @@ dirCreateHierarchy(const char *path, int mode, } if (err != 0) { - free(cpath); return -1; } - if (timestamp != NULL && utime(cpath, timestamp)) { - free(cpath); + if (timestamp != NULL && utime(path_start, timestamp)) { return -1; } } // else, this directory already exists. - - /* Repair the path and continue. - */ + + // Repair the path and continue. *p = '/'; } - free(cpath); - return 0; } diff --git a/minzip/DirUtil.h b/minzip/DirUtil.h index 85a00128b..85b83c387 100644 --- a/minzip/DirUtil.h +++ b/minzip/DirUtil.h @@ -24,8 +24,7 @@ extern "C" { #endif -#include <selinux/selinux.h> -#include <selinux/label.h> +struct selabel_handle; /* Like "mkdir -p", try to guarantee that all directories * specified in path are present, creating as many directories diff --git a/minzip/Zip.c b/minzip/Zip.c index bdb565c64..d557daa7f 100644 --- a/minzip/Zip.c +++ b/minzip/Zip.c @@ -23,6 +23,9 @@ #undef NDEBUG // do this after including Log.h #include <assert.h> +#include <selinux/label.h> +#include <selinux/selinux.h> + #define SORT_ENTRIES 1 /* @@ -91,7 +94,7 @@ enum { static void dumpEntry(const ZipEntry* pEntry) { LOGI(" %p '%.*s'\n", pEntry->fileName,pEntry->fileNameLen,pEntry->fileName); - LOGI(" off=%ld comp=%ld uncomp=%ld how=%d\n", pEntry->offset, + LOGI(" off=%u comp=%u uncomp=%u how=%d\n", pEntry->offset, pEntry->compLen, pEntry->uncompLen, pEntry->compression); } #endif @@ -505,13 +508,11 @@ static bool processDeflatedEntry(const ZipArchive *pArchive, const ZipEntry *pEntry, ProcessZipEntryContentsFunction processFunction, void *cookie) { - long result = -1; + bool success = false; + unsigned long totalOut = 0; unsigned char procBuf[32 * 1024]; z_stream zstream; int zerr; - long compRemaining; - - compRemaining = pEntry->compLen; /* * Initialize the zlib stream. @@ -572,16 +573,17 @@ static bool processDeflatedEntry(const ZipArchive *pArchive, assert(zerr == Z_STREAM_END); /* other errors should've been caught */ // success! - result = zstream.total_out; + totalOut = zstream.total_out; + success = true; z_bail: inflateEnd(&zstream); /* free up any allocated structures */ bail: - if (result != pEntry->uncompLen) { - if (result != -1) // error already shown? - LOGW("Size mismatch on inflated file (%ld vs %ld)\n", - result, pEntry->uncompLen); + if (totalOut != pEntry->uncompLen) { + if (success) { // error already shown? + LOGW("Size mismatch on inflated file (%lu vs %u)\n", totalOut, pEntry->uncompLen); + } return false; } return true; @@ -759,7 +761,7 @@ static const char *targetEntryPath(MzPathHelper *helper, ZipEntry *pEntry) */ needLen = helper->targetDirLen + 1 + pEntry->fileNameLen - helper->zipDirLen + 1; - if (needLen > helper->bufLen) { + if (firstTime || needLen > helper->bufLen) { char *newBuf; needLen *= 2; @@ -966,7 +968,7 @@ bool mzExtractRecursive(const ZipArchive *pArchive, setfscreatecon(secontext); } - int fd = open(targetFile, O_CREAT|O_WRONLY|O_TRUNC|O_SYNC, + int fd = open(targetFile, O_CREAT|O_WRONLY|O_TRUNC, UNZIP_FILEMODE); if (secontext) { diff --git a/minzip/Zip.h b/minzip/Zip.h index 86d8db597..c932c1178 100644 --- a/minzip/Zip.h +++ b/minzip/Zip.h @@ -18,8 +18,7 @@ extern "C" { #endif -#include <selinux/selinux.h> -#include <selinux/label.h> +struct selabel_handle; /* * One entry in the Zip archive. Treat this as opaque -- use accessors below. @@ -32,9 +31,9 @@ extern "C" { typedef struct ZipEntry { unsigned int fileNameLen; const char* fileName; // not null-terminated - long offset; - long compLen; - long uncompLen; + uint32_t offset; + uint32_t compLen; + uint32_t uncompLen; int compression; long modTime; long crc32; @@ -85,10 +84,10 @@ void mzCloseZipArchive(ZipArchive* pArchive); const ZipEntry* mzFindZipEntry(const ZipArchive* pArchive, const char* entryName); -INLINE long mzGetZipEntryOffset(const ZipEntry* pEntry) { +INLINE uint32_t mzGetZipEntryOffset(const ZipEntry* pEntry) { return pEntry->offset; } -INLINE long mzGetZipEntryUncompLen(const ZipEntry* pEntry) { +INLINE uint32_t mzGetZipEntryUncompLen(const ZipEntry* pEntry) { return pEntry->uncompLen; } diff --git a/otafault/Android.mk b/otafault/Android.mk index ba7add855..d0b1174a4 100644 --- a/otafault/Android.mk +++ b/otafault/Android.mk @@ -32,6 +32,8 @@ LOCAL_WHOLE_STATIC_LIBRARIES := $(otafault_static_libs) include $(BUILD_STATIC_LIBRARY) +# otafault_test (static executable) +# =============================== include $(CLEAR_VARS) LOCAL_SRC_FILES := config.cpp ota_io.cpp test.cpp diff --git a/otafault/ota_io.cpp b/otafault/ota_io.cpp index 04458537b..94be8155a 100644 --- a/otafault/ota_io.cpp +++ b/otafault/ota_io.cpp @@ -92,6 +92,7 @@ size_t ota_fread(void* ptr, size_t size, size_t nitems, FILE* stream) { } } size_t status = fread(ptr, size, nitems, stream); + // If I/O error occurs, set the retry-update flag. if (status != nitems && errno == EIO) { have_eio_error = true; } diff --git a/recovery-refresh.cpp b/recovery-refresh.cpp index 70adc70ee..333367eba 100644 --- a/recovery-refresh.cpp +++ b/recovery-refresh.cpp @@ -92,7 +92,7 @@ static ssize_t logrotate( if (!isdigit(number.data()[0])) { name += ".1"; } else { - unsigned long long i = std::stoull(number); + auto i = std::stoull(number); name = sub + "." + std::to_string(i + 1); } } diff --git a/recovery.cpp b/recovery.cpp index 6b6643fab..79b99b176 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -19,7 +19,9 @@ #include <errno.h> #include <fcntl.h> #include <getopt.h> +#include <inttypes.h> #include <limits.h> +#include <linux/fs.h> #include <linux/input.h> #include <stdarg.h> #include <stdio.h> @@ -33,18 +35,23 @@ #include <unistd.h> #include <chrono> +#include <string> +#include <vector> #include <adb.h> #include <android/log.h> /* Android Log Priority Tags */ #include <android-base/file.h> #include <android-base/parseint.h> #include <android-base/stringprintf.h> +#include <android-base/strings.h> +#include <android-base/unique_fd.h> #include <cutils/android_reboot.h> #include <cutils/properties.h> +#include <healthd/BatteryMonitor.h> #include <log/logger.h> /* Android Log packet format */ #include <private/android_logger.h> /* private pmsg functions */ - -#include <healthd/BatteryMonitor.h> +#include <selinux/label.h> +#include <selinux/selinux.h> #include "adb_install.h" #include "bootloader.h" @@ -63,7 +70,6 @@ struct selabel_handle *sehandle; static const struct option OPTIONS[] = { - { "send_intent", required_argument, NULL, 'i' }, { "update_package", required_argument, NULL, 'u' }, { "retry_count", required_argument, NULL, 'n' }, { "wipe_data", no_argument, NULL, 'w' }, @@ -77,12 +83,12 @@ static const struct option OPTIONS[] = { { "shutdown_after", no_argument, NULL, 'p' }, { "reason", required_argument, NULL, 'r' }, { "security", no_argument, NULL, 'e'}, + { "brick", no_argument, NULL, 0 }, { NULL, 0, NULL, 0 }, }; static const char *CACHE_LOG_DIR = "/cache/recovery"; static const char *COMMAND_FILE = "/cache/recovery/command"; -static const char *INTENT_FILE = "/cache/recovery/intent"; static const char *LOG_FILE = "/cache/recovery/log"; static const char *LAST_INSTALL_FILE = "/cache/recovery/last_install"; static const char *LOCALE_FILE = "/cache/recovery/last_locale"; @@ -103,6 +109,7 @@ static const int BATTERY_READ_TIMEOUT_IN_SEC = 10; // So we should check battery with a slightly lower limitation. static const int BATTERY_OK_PERCENTAGE = 20; static const int BATTERY_WITH_CHARGER_OK_PERCENTAGE = 15; +constexpr const char* RECOVERY_BRICK = "/etc/recovery.brick"; RecoveryUI* ui = NULL; static const char* locale = "en_US"; @@ -115,10 +122,8 @@ static bool has_cache = false; * The recovery tool communicates with the main system through /cache files. * /cache/recovery/command - INPUT - command line for tool, one arg per line * /cache/recovery/log - OUTPUT - combined log file from recovery run(s) - * /cache/recovery/intent - OUTPUT - intent that was passed in * * The arguments which may be supplied in the recovery.command file: - * --send_intent=anystring - write the text out to recovery.intent * --update_package=path - verify install an OTA package file * --wipe_data - erase user data (and cache), then reboot * --wipe_cache - wipe cache (but not user data), then reboot @@ -399,7 +404,7 @@ static void copy_log_file_to_pmsg(const char* source, const char* destination) { } // How much of the temp log we have copied to the copy in cache. -static long tmplog_offset = 0; +static off_t tmplog_offset = 0; static void copy_log_file(const char* source, const char* destination, bool append) { FILE* dest_fp = fopen_path(destination, append ? "a" : "w"); @@ -409,7 +414,7 @@ static void copy_log_file(const char* source, const char* destination, bool appe FILE* source_fp = fopen(source, "r"); if (source_fp != nullptr) { if (append) { - fseek(source_fp, tmplog_offset, SEEK_SET); // Since last write + fseeko(source_fp, tmplog_offset, SEEK_SET); // Since last write } char buf[4096]; size_t bytes; @@ -417,7 +422,7 @@ static void copy_log_file(const char* source, const char* destination, bool appe fwrite(buf, 1, bytes, dest_fp); } if (append) { - tmplog_offset = ftell(source_fp); + tmplog_offset = ftello(source_fp); } check_and_fclose(source_fp, source); } @@ -491,22 +496,10 @@ static void copy_logs() { } // clear the recovery command and prepare to boot a (hopefully working) system, -// copy our log file to cache as well (for the system to read), and -// record any intent we were asked to communicate back to the system. -// this function is idempotent: call it as many times as you like. +// copy our log file to cache as well (for the system to read). This function is +// idempotent: call it as many times as you like. static void -finish_recovery(const char *send_intent) { - // By this point, we're ready to return to the main system... - if (send_intent != NULL && has_cache) { - FILE *fp = fopen_path(INTENT_FILE, "w"); - if (fp == NULL) { - LOGE("Can't open %s\n", INTENT_FILE); - } else { - fputs(send_intent, fp); - check_and_fclose(fp, INTENT_FILE); - } - } - +finish_recovery() { // Save the locale to cache, so if recovery is next started up // without a --locale argument (eg, directly from the bootloader) // it will use the last-known locale. @@ -853,6 +846,75 @@ static bool wipe_cache(bool should_confirm, Device* device) { return success; } +// Secure-wipe a given partition. It uses BLKSECDISCARD, if supported. +// Otherwise, it goes with BLKDISCARD (if device supports BLKDISCARDZEROES) or +// BLKZEROOUT. +static bool secure_wipe_partition(const std::string& partition) { + android::base::unique_fd fd(TEMP_FAILURE_RETRY(open(partition.c_str(), O_WRONLY))); + if (fd == -1) { + LOGE("failed to open \"%s\": %s\n", partition.c_str(), strerror(errno)); + return false; + } + + uint64_t range[2] = {0, 0}; + if (ioctl(fd, BLKGETSIZE64, &range[1]) == -1 || range[1] == 0) { + LOGE("failed to get partition size: %s\n", strerror(errno)); + return false; + } + printf("Secure-wiping \"%s\" from %" PRIu64 " to %" PRIu64 ".\n", + partition.c_str(), range[0], range[1]); + + printf("Trying BLKSECDISCARD...\t"); + if (ioctl(fd, BLKSECDISCARD, &range) == -1) { + printf("failed: %s\n", strerror(errno)); + + // Use BLKDISCARD if it zeroes out blocks, otherwise use BLKZEROOUT. + unsigned int zeroes; + if (ioctl(fd, BLKDISCARDZEROES, &zeroes) == 0 && zeroes != 0) { + printf("Trying BLKDISCARD...\t"); + if (ioctl(fd, BLKDISCARD, &range) == -1) { + printf("failed: %s\n", strerror(errno)); + return false; + } + } else { + printf("Trying BLKZEROOUT...\t"); + if (ioctl(fd, BLKZEROOUT, &range) == -1) { + printf("failed: %s\n", strerror(errno)); + return false; + } + } + } + + printf("done\n"); + return true; +} + +// Brick the current device, with a secure wipe of all the partitions in +// RECOVERY_BRICK. +static bool brick_device() { + ui->SetBackground(RecoveryUI::ERASING); + ui->SetProgressType(RecoveryUI::INDETERMINATE); + + std::string partition_list; + if (!android::base::ReadFileToString(RECOVERY_BRICK, &partition_list)) { + LOGE("failed to read \"%s\".\n", RECOVERY_BRICK); + return false; + } + + std::vector<std::string> lines = android::base::Split(partition_list, "\n"); + for (const std::string& line : lines) { + std::string partition = android::base::Trim(line); + // Ignore '#' comment or empty lines. + if (android::base::StartsWith(partition, "#") || partition.empty()) { + continue; + } + + // Proceed anyway even if it fails to wipe some partition. + secure_wipe_partition(partition); + } + return true; +} + static void choose_recovery_file(Device* device) { if (!has_cache) { ui->Print("No /cache partition found.\n"); @@ -1028,7 +1090,7 @@ static int apply_from_sdcard(Device* device, bool* wipe_cache) { static Device::BuiltinAction prompt_and_wait(Device* device, int status) { for (;;) { - finish_recovery(NULL); + finish_recovery(); switch (status) { case INSTALL_SUCCESS: case INSTALL_NONE: @@ -1290,7 +1352,7 @@ static ssize_t logrotate( if (!isdigit(number.data()[0])) { name += ".1"; } else { - unsigned long long i = std::stoull(number); + auto i = std::stoull(number); name = sub + "." + std::to_string(i + 1); } } @@ -1336,10 +1398,10 @@ int main(int argc, char **argv) { get_args(&argc, &argv); - const char *send_intent = NULL; const char *update_package = NULL; bool should_wipe_data = false; bool should_wipe_cache = false; + bool should_brick = false; bool show_text = false; bool sideload = false; bool sideload_auto_reboot = false; @@ -1349,9 +1411,9 @@ int main(int argc, char **argv) { bool security_update = false; int arg; - while ((arg = getopt_long(argc, argv, "", OPTIONS, NULL)) != -1) { + int option_index; + while ((arg = getopt_long(argc, argv, "", OPTIONS, &option_index)) != -1) { switch (arg) { - case 'i': send_intent = optarg; break; case 'n': android::base::ParseInt(optarg, &retry_count, 0); break; case 'u': update_package = optarg; break; case 'w': should_wipe_data = true; break; @@ -1372,6 +1434,13 @@ int main(int argc, char **argv) { case 'p': shutdown_after = true; break; case 'r': reason = optarg; break; case 'e': security_update = true; break; + case 0: { + if (strcmp(OPTIONS[option_index].name, "brick") == 0) { + should_brick = true; + break; + } + break; + } case '?': LOGE("Invalid command argument\n"); continue; @@ -1510,6 +1579,10 @@ int main(int argc, char **argv) { if (!wipe_cache(false, device)) { status = INSTALL_ERROR; } + } else if (should_brick) { + if (!brick_device()) { + status = INSTALL_ERROR; + } } else if (sideload) { // 'adb reboot sideload' acts the same as user presses key combinations // to enter the sideload mode. When 'sideload-auto-reboot' is used, text @@ -1557,7 +1630,7 @@ int main(int argc, char **argv) { } // Save logs and clean up before rebooting or shutting down. - finish_recovery(send_intent); + finish_recovery(); switch (after) { case Device::SHUTDOWN: diff --git a/screen_ui.cpp b/screen_ui.cpp index 85f789f3f..369755438 100644 --- a/screen_ui.cpp +++ b/screen_ui.cpp @@ -398,7 +398,7 @@ void ScreenRecoveryUI::ProgressThreadLoop() { // minimum of 20ms delay between frames double delay = interval - (end-start); if (delay < 0.02) delay = 0.02; - usleep((long)(delay * 1000000)); + usleep(static_cast<useconds_t>(delay * 1000000)); } } @@ -649,8 +649,8 @@ void ScreenRecoveryUI::ClearText() { } void ScreenRecoveryUI::ShowFile(FILE* fp) { - std::vector<long> offsets; - offsets.push_back(ftell(fp)); + std::vector<off_t> offsets; + offsets.push_back(ftello(fp)); ClearText(); struct stat sb; @@ -660,7 +660,7 @@ void ScreenRecoveryUI::ShowFile(FILE* fp) { while (true) { if (show_prompt) { PrintOnScreenOnly("--(%d%% of %d bytes)--", - static_cast<int>(100 * (double(ftell(fp)) / double(sb.st_size))), + static_cast<int>(100 * (double(ftello(fp)) / double(sb.st_size))), static_cast<int>(sb.st_size)); Redraw(); while (show_prompt) { @@ -679,7 +679,7 @@ void ScreenRecoveryUI::ShowFile(FILE* fp) { if (feof(fp)) { return; } - offsets.push_back(ftell(fp)); + offsets.push_back(ftello(fp)); } } ClearText(); diff --git a/tests/Android.mk b/tests/Android.mk index a66991b21..4509c420f 100644 --- a/tests/Android.mk +++ b/tests/Android.mk @@ -49,6 +49,7 @@ LOCAL_STATIC_LIBRARIES := \ libmtdutils \ libbase \ libverifier \ + libcrypto_utils_static \ libcrypto_static \ libminui \ libminzip \ diff --git a/tests/component/verifier_test.cpp b/tests/component/verifier_test.cpp index 780ff2816..d7166dfaf 100644 --- a/tests/component/verifier_test.cpp +++ b/tests/component/verifier_test.cpp @@ -45,14 +45,14 @@ class MockUI : public RecoveryUI { void Init() { } void SetStage(int, int) { } void SetLocale(const char*) { } - void SetBackground(Icon icon) { } - void SetSystemUpdateText(bool security_update) { } + void SetBackground(Icon /*icon*/) { } + void SetSystemUpdateText(bool /*security_update*/) { } - void SetProgressType(ProgressType determinate) { } - void ShowProgress(float portion, float seconds) { } - void SetProgress(float fraction) { } + void SetProgressType(ProgressType /*determinate*/) { } + void ShowProgress(float /*portion*/, float /*seconds*/) { } + void SetProgress(float /*fraction*/) { } - void ShowText(bool visible) { } + void ShowText(bool /*visible*/) { } bool IsTextVisible() { return false; } bool WasTextEverVisible() { return false; } void Print(const char* fmt, ...) { @@ -69,9 +69,10 @@ class MockUI : public RecoveryUI { } void ShowFile(const char*) { } - void StartMenu(const char* const * headers, const char* const * items, - int initial_selection) { } - int SelectMenu(int sel) { return 0; } + void StartMenu(const char* const* /*headers*/, + const char* const* /*items*/, + int /*initial_selection*/) { } + int SelectMenu(int /*sel*/) { return 0; } void EndMenu() { } }; diff --git a/tools/ota/Android.mk b/tools/dumpkey/Android.mk index 142c3b257..31549146d 100644 --- a/tools/ota/Android.mk +++ b/tools/dumpkey/Android.mk @@ -15,19 +15,8 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -LOCAL_FORCE_STATIC_EXECUTABLE := true -LOCAL_MODULE := add-property-tag -LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) -LOCAL_MODULE_TAGS := debug -LOCAL_SRC_FILES := add-property-tag.c -LOCAL_STATIC_LIBRARIES := libc -include $(BUILD_EXECUTABLE) - -include $(CLEAR_VARS) -LOCAL_FORCE_STATIC_EXECUTABLE := true -LOCAL_MODULE := check-lost+found -LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) -LOCAL_MODULE_TAGS := debug -LOCAL_SRC_FILES := check-lost+found.c -LOCAL_STATIC_LIBRARIES := libcutils libc -include $(BUILD_EXECUTABLE) +LOCAL_MODULE := dumpkey +LOCAL_SRC_FILES := DumpPublicKey.java +LOCAL_JAR_MANIFEST := DumpPublicKey.mf +LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-host +include $(BUILD_HOST_JAVA_LIBRARY) diff --git a/tools/dumpkey/DumpPublicKey.java b/tools/dumpkey/DumpPublicKey.java new file mode 100644 index 000000000..3eb139842 --- /dev/null +++ b/tools/dumpkey/DumpPublicKey.java @@ -0,0 +1,270 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.dumpkey; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import java.io.FileInputStream; +import java.math.BigInteger; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.security.KeyStore; +import java.security.Key; +import java.security.PublicKey; +import java.security.Security; +import java.security.interfaces.ECPublicKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.ECPoint; + +/** + * Command line tool to extract RSA public keys from X.509 certificates + * and output source code with data initializers for the keys. + * @hide + */ +class DumpPublicKey { + /** + * @param key to perform sanity checks on + * @return version number of key. Supported versions are: + * 1: 2048-bit RSA key with e=3 and SHA-1 hash + * 2: 2048-bit RSA key with e=65537 and SHA-1 hash + * 3: 2048-bit RSA key with e=3 and SHA-256 hash + * 4: 2048-bit RSA key with e=65537 and SHA-256 hash + * @throws Exception if the key has the wrong size or public exponent + */ + static int checkRSA(RSAPublicKey key, boolean useSHA256) throws Exception { + BigInteger pubexp = key.getPublicExponent(); + BigInteger modulus = key.getModulus(); + int version; + + if (pubexp.equals(BigInteger.valueOf(3))) { + version = useSHA256 ? 3 : 1; + } else if (pubexp.equals(BigInteger.valueOf(65537))) { + version = useSHA256 ? 4 : 2; + } else { + throw new Exception("Public exponent should be 3 or 65537 but is " + + pubexp.toString(10) + "."); + } + + if (modulus.bitLength() != 2048) { + throw new Exception("Modulus should be 2048 bits long but is " + + modulus.bitLength() + " bits."); + } + + return version; + } + + /** + * @param key to perform sanity checks on + * @return version number of key. Supported versions are: + * 5: 256-bit EC key with curve NIST P-256 + * @throws Exception if the key has the wrong size or public exponent + */ + static int checkEC(ECPublicKey key) throws Exception { + if (key.getParams().getCurve().getField().getFieldSize() != 256) { + throw new Exception("Curve must be NIST P-256"); + } + + return 5; + } + + /** + * Perform sanity check on public key. + */ + static int check(PublicKey key, boolean useSHA256) throws Exception { + if (key instanceof RSAPublicKey) { + return checkRSA((RSAPublicKey) key, useSHA256); + } else if (key instanceof ECPublicKey) { + if (!useSHA256) { + throw new Exception("Must use SHA-256 with EC keys!"); + } + return checkEC((ECPublicKey) key); + } else { + throw new Exception("Unsupported key class: " + key.getClass().getName()); + } + } + + /** + * @param key to output + * @return a String representing this public key. If the key is a + * version 1 key, the string will be a C initializer; this is + * not true for newer key versions. + */ + static String printRSA(RSAPublicKey key, boolean useSHA256) throws Exception { + int version = check(key, useSHA256); + + BigInteger N = key.getModulus(); + + StringBuilder result = new StringBuilder(); + + int nwords = N.bitLength() / 32; // # of 32 bit integers in modulus + + if (version > 1) { + result.append("v"); + result.append(Integer.toString(version)); + result.append(" "); + } + + result.append("{"); + result.append(nwords); + + BigInteger B = BigInteger.valueOf(0x100000000L); // 2^32 + BigInteger N0inv = B.subtract(N.modInverse(B)); // -1 / N[0] mod 2^32 + + result.append(",0x"); + result.append(N0inv.toString(16)); + + BigInteger R = BigInteger.valueOf(2).pow(N.bitLength()); + BigInteger RR = R.multiply(R).mod(N); // 2^4096 mod N + + // Write out modulus as little endian array of integers. + result.append(",{"); + for (int i = 0; i < nwords; ++i) { + long n = N.mod(B).longValue(); + result.append(n); + + if (i != nwords - 1) { + result.append(","); + } + + N = N.divide(B); + } + result.append("}"); + + // Write R^2 as little endian array of integers. + result.append(",{"); + for (int i = 0; i < nwords; ++i) { + long rr = RR.mod(B).longValue(); + result.append(rr); + + if (i != nwords - 1) { + result.append(","); + } + + RR = RR.divide(B); + } + result.append("}"); + + result.append("}"); + return result.toString(); + } + + /** + * @param key to output + * @return a String representing this public key. If the key is a + * version 1 key, the string will be a C initializer; this is + * not true for newer key versions. + */ + static String printEC(ECPublicKey key) throws Exception { + int version = checkEC(key); + + StringBuilder result = new StringBuilder(); + + result.append("v"); + result.append(Integer.toString(version)); + result.append(" "); + + BigInteger X = key.getW().getAffineX(); + BigInteger Y = key.getW().getAffineY(); + int nbytes = key.getParams().getCurve().getField().getFieldSize() / 8; // # of 32 bit integers in X coordinate + + result.append("{"); + result.append(nbytes); + + BigInteger B = BigInteger.valueOf(0x100L); // 2^8 + + // Write out Y coordinate as array of characters. + result.append(",{"); + for (int i = 0; i < nbytes; ++i) { + long n = X.mod(B).longValue(); + result.append(n); + + if (i != nbytes - 1) { + result.append(","); + } + + X = X.divide(B); + } + result.append("}"); + + // Write out Y coordinate as array of characters. + result.append(",{"); + for (int i = 0; i < nbytes; ++i) { + long n = Y.mod(B).longValue(); + result.append(n); + + if (i != nbytes - 1) { + result.append(","); + } + + Y = Y.divide(B); + } + result.append("}"); + + result.append("}"); + return result.toString(); + } + + static String print(PublicKey key, boolean useSHA256) throws Exception { + if (key instanceof RSAPublicKey) { + return printRSA((RSAPublicKey) key, useSHA256); + } else if (key instanceof ECPublicKey) { + return printEC((ECPublicKey) key); + } else { + throw new Exception("Unsupported key class: " + key.getClass().getName()); + } + } + + public static void main(String[] args) { + if (args.length < 1) { + System.err.println("Usage: DumpPublicKey certfile ... > source.c"); + System.exit(1); + } + Security.addProvider(new BouncyCastleProvider()); + try { + for (int i = 0; i < args.length; i++) { + FileInputStream input = new FileInputStream(args[i]); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + X509Certificate cert = (X509Certificate) cf.generateCertificate(input); + + boolean useSHA256 = false; + String sigAlg = cert.getSigAlgName(); + if ("SHA1withRSA".equals(sigAlg) || "MD5withRSA".equals(sigAlg)) { + // SignApk has historically accepted "MD5withRSA" + // certificates, but treated them as "SHA1withRSA" + // anyway. Continue to do so for backwards + // compatibility. + useSHA256 = false; + } else if ("SHA256withRSA".equals(sigAlg) || "SHA256withECDSA".equals(sigAlg)) { + useSHA256 = true; + } else { + System.err.println(args[i] + ": unsupported signature algorithm \"" + + sigAlg + "\""); + System.exit(1); + } + + PublicKey key = cert.getPublicKey(); + check(key, useSHA256); + System.out.print(print(key, useSHA256)); + System.out.println(i < args.length - 1 ? "," : ""); + } + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + System.exit(0); + } +} diff --git a/tools/dumpkey/DumpPublicKey.mf b/tools/dumpkey/DumpPublicKey.mf new file mode 100644 index 000000000..7bb3bc88d --- /dev/null +++ b/tools/dumpkey/DumpPublicKey.mf @@ -0,0 +1 @@ +Main-Class: com.android.dumpkey.DumpPublicKey diff --git a/tools/ota/add-property-tag.c b/tools/ota/add-property-tag.c deleted file mode 100644 index aab30b2d0..000000000 --- a/tools/ota/add-property-tag.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <ctype.h> -#include <errno.h> -#include <getopt.h> -#include <limits.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -/* - * Append a tag to a property value in a .prop file if it isn't already there. - * Normally used to modify build properties to record incremental updates. - */ - -// Return nonzero if the tag should be added to this line. -int should_tag(const char *line, const char *propname) { - const char *prop = strstr(line, propname); - if (prop == NULL) return 0; - - // Make sure this is actually the property name (not an accidental hit) - const char *ptr; - for (ptr = line; ptr < prop && isspace(*ptr); ++ptr) ; - if (ptr != prop) return 0; // Must be at the beginning of the line - - for (ptr += strlen(propname); *ptr != '\0' && isspace(*ptr); ++ptr) ; - return (*ptr == '='); // Must be followed by a '=' -} - -// Remove existing tags from the line, return the following number (if any) -int remove_tag(char *line, const char *tag) { - char *pos = strstr(line, tag); - if (pos == NULL) return 0; - - char *end; - int num = strtoul(pos + strlen(tag), &end, 10); - strcpy(pos, end); - return num; -} - -// Write line to output with the tag added, adding a number (if >0) -void write_tagged(FILE *out, const char *line, const char *tag, int number) { - const char *end = line + strlen(line); - while (end > line && isspace(end[-1])) --end; - if (number > 0) { - fprintf(out, "%.*s%s%d%s", (int)(end - line), line, tag, number, end); - } else { - fprintf(out, "%.*s%s%s", (int)(end - line), line, tag, end); - } -} - -int main(int argc, char **argv) { - const char *filename = "/system/build.prop"; - const char *propname = "ro.build.fingerprint"; - const char *tag = NULL; - int do_remove = 0, do_number = 0; - - int opt; - while ((opt = getopt(argc, argv, "f:p:rn")) != -1) { - switch (opt) { - case 'f': filename = optarg; break; - case 'p': propname = optarg; break; - case 'r': do_remove = 1; break; - case 'n': do_number = 1; break; - case '?': return 2; - } - } - - if (argc != optind + 1) { - fprintf(stderr, - "usage: add-property-tag [flags] tag-to-add\n" - "flags: -f /dir/file.prop (default /system/build.prop)\n" - " -p prop.name (default ro.build.fingerprint)\n" - " -r (if set, remove the tag rather than adding it)\n" - " -n (if set, add and increment a number after the tag)\n"); - return 2; - } - - tag = argv[optind]; - FILE *input = fopen(filename, "r"); - if (input == NULL) { - fprintf(stderr, "can't read %s: %s\n", filename, strerror(errno)); - return 1; - } - - char tmpname[PATH_MAX]; - snprintf(tmpname, sizeof(tmpname), "%s.tmp", filename); - FILE *output = fopen(tmpname, "w"); - if (output == NULL) { - fprintf(stderr, "can't write %s: %s\n", tmpname, strerror(errno)); - return 1; - } - - int found = 0; - char line[4096]; - while (fgets(line, sizeof(line), input)) { - if (!should_tag(line, propname)) { - fputs(line, output); // Pass through unmodified - } else { - found = 1; - int number = remove_tag(line, tag); - if (do_remove) { - fputs(line, output); // Remove the tag but don't re-add it - } else { - write_tagged(output, line, tag, number + do_number); - } - } - } - - fclose(input); - fclose(output); - - if (!found) { - fprintf(stderr, "property %s not found in %s\n", propname, filename); - remove(tmpname); - return 1; - } - - if (rename(tmpname, filename)) { - fprintf(stderr, "can't rename %s to %s: %s\n", - tmpname, filename, strerror(errno)); - remove(tmpname); - return 1; - } - - return 0; -} diff --git a/tools/ota/check-lost+found.c b/tools/ota/check-lost+found.c deleted file mode 100644 index 8ce12d39f..000000000 --- a/tools/ota/check-lost+found.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <dirent.h> -#include <errno.h> -#include <fcntl.h> -#include <limits.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/klog.h> -#include <sys/reboot.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <time.h> -#include <unistd.h> - -#include "private/android_filesystem_config.h" - -// Sentinel file used to track whether we've forced a reboot -static const char *kMarkerFile = "/data/misc/check-lost+found-rebooted-2"; - -// Output file in tombstones directory (first 8K will be uploaded) -static const char *kOutputDir = "/data/tombstones"; -static const char *kOutputFile = "/data/tombstones/check-lost+found-log"; - -// Partitions to check -static const char *kPartitions[] = { "/system", "/data", "/cache", NULL }; - -/* - * 1. If /data/misc/forced-reboot is missing, touch it & force "unclean" boot. - * 2. Write a log entry with the number of files in lost+found directories. - */ - -int main(int argc __attribute__((unused)), char **argv __attribute__((unused))) { - mkdir(kOutputDir, 0755); - chown(kOutputDir, AID_SYSTEM, AID_SYSTEM); - FILE *out = fopen(kOutputFile, "a"); - if (out == NULL) { - fprintf(stderr, "Can't write %s: %s\n", kOutputFile, strerror(errno)); - return 1; - } - - // Note: only the first 8K of log will be uploaded, so be terse. - time_t start = time(NULL); - fprintf(out, "*** check-lost+found ***\nStarted: %s", ctime(&start)); - - struct stat st; - if (stat(kMarkerFile, &st)) { - // No reboot marker -- need to force an unclean reboot. - // But first, try to create the marker file. If that fails, - // skip the reboot, so we don't get caught in an infinite loop. - - int fd = open(kMarkerFile, O_WRONLY|O_CREAT, 0444); - if (fd >= 0 && close(fd) == 0) { - fprintf(out, "Wrote %s, rebooting\n", kMarkerFile); - fflush(out); - sync(); // Make sure the marker file is committed to disk - - // If possible, dirty each of these partitions before rebooting, - // to make sure the filesystem has to do a scan on mount. - int i; - for (i = 0; kPartitions[i] != NULL; ++i) { - char fn[PATH_MAX]; - snprintf(fn, sizeof(fn), "%s/%s", kPartitions[i], "dirty"); - fd = open(fn, O_WRONLY|O_CREAT, 0444); - if (fd >= 0) { // Don't sweat it if we can't write the file. - TEMP_FAILURE_RETRY(write(fd, fn, sizeof(fn))); // write, you know, some data - close(fd); - unlink(fn); - } - } - - reboot(RB_AUTOBOOT); // reboot immediately, with dirty filesystems - fprintf(out, "Reboot failed?!\n"); - exit(1); - } else { - fprintf(out, "Can't write %s: %s\n", kMarkerFile, strerror(errno)); - } - } else { - fprintf(out, "Found %s\n", kMarkerFile); - } - - int i; - for (i = 0; kPartitions[i] != NULL; ++i) { - char fn[PATH_MAX]; - snprintf(fn, sizeof(fn), "%s/%s", kPartitions[i], "lost+found"); - DIR *dir = opendir(fn); - if (dir == NULL) { - fprintf(out, "Can't open %s: %s\n", fn, strerror(errno)); - } else { - int count = 0; - struct dirent *ent; - while ((ent = readdir(dir))) { - if (strcmp(ent->d_name, ".") && strcmp(ent->d_name, "..")) - ++count; - } - closedir(dir); - if (count > 0) { - fprintf(out, "OMGZ FOUND %d FILES IN %s\n", count, fn); - } else { - fprintf(out, "%s is clean\n", fn); - } - } - } - - char dmesg[131073]; - int len = klogctl(KLOG_READ_ALL, dmesg, sizeof(dmesg) - 1); - if (len < 0) { - fprintf(out, "Can't read kernel log: %s\n", strerror(errno)); - } else { // To conserve space, only write lines with certain keywords - fprintf(out, "--- Kernel log ---\n"); - dmesg[len] = '\0'; - char *saveptr, *line; - int in_yaffs = 0; - for (line = strtok_r(dmesg, "\n", &saveptr); line != NULL; - line = strtok_r(NULL, "\n", &saveptr)) { - if (strstr(line, "yaffs: dev is")) in_yaffs = 1; - - if (in_yaffs || - strstr(line, "yaffs") || - strstr(line, "mtd") || - strstr(line, "msm_nand")) { - fprintf(out, "%s\n", line); - } - - if (strstr(line, "yaffs_read_super: isCheckpointed")) in_yaffs = 0; - } - } - - return 0; -} diff --git a/tools/ota/convert-to-bmp.py b/tools/ota/convert-to-bmp.py deleted file mode 100644 index 446c09da8..000000000 --- a/tools/ota/convert-to-bmp.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/python2.4 - -"""A simple script to convert asset images to BMP files, that supports -RGBA image.""" - -import struct -import Image -import sys - -infile = sys.argv[1] -outfile = sys.argv[2] - -if not outfile.endswith(".bmp"): - print >> sys.stderr, "Warning: I'm expecting to write BMP files." - -im = Image.open(infile) -if im.mode == 'RGB': - im.save(outfile) -elif im.mode == 'RGBA': - # Python Imaging Library doesn't write RGBA BMP files, so we roll - # our own. - - BMP_HEADER_FMT = ("<" # little-endian - "H" # signature - "L" # file size - "HH" # reserved (set to 0) - "L" # offset to start of bitmap data) - ) - - BITMAPINFO_HEADER_FMT= ("<" # little-endian - "L" # size of this struct - "L" # width - "L" # height - "H" # planes (set to 1) - "H" # bit count - "L" # compression (set to 0 for minui) - "L" # size of image data (0 if uncompressed) - "L" # x pixels per meter (1) - "L" # y pixels per meter (1) - "L" # colors used (0) - "L" # important colors (0) - ) - - fileheadersize = struct.calcsize(BMP_HEADER_FMT) - infoheadersize = struct.calcsize(BITMAPINFO_HEADER_FMT) - - header = struct.pack(BMP_HEADER_FMT, - 0x4d42, # "BM" in little-endian - (fileheadersize + infoheadersize + - im.size[0] * im.size[1] * 4), - 0, 0, - fileheadersize + infoheadersize) - - info = struct.pack(BITMAPINFO_HEADER_FMT, - infoheadersize, - im.size[0], - im.size[1], - 1, - 32, - 0, - 0, - 1, - 1, - 0, - 0) - - f = open(outfile, "wb") - f.write(header) - f.write(info) - data = im.tostring() - for j in range(im.size[1]-1, -1, -1): # rows bottom-to-top - for i in range(j*im.size[0]*4, (j+1)*im.size[0]*4, 4): - f.write(data[i+2]) # B - f.write(data[i+1]) # G - f.write(data[i+0]) # R - f.write(data[i+3]) # A - f.close() -else: - print >> sys.stderr, "Don't know how to handle image mode '%s'." % (im.mode,) diff --git a/tools/recovery_l10n/res/values-af/strings.xml b/tools/recovery_l10n/res/values-af/strings.xml index b1974da20..d5264184a 100644 --- a/tools/recovery_l10n/res/values-af/strings.xml +++ b/tools/recovery_l10n/res/values-af/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Installeer tans stelselopdatering"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Vee tans uit"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Geen opdrag nie"</string> - <string name="recovery_error" msgid="5748178989622716736">"Fout!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Installeer tans sekuriteitopdatering"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Installeer tans stelselopdatering..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Vee tans uit..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Geen bevel."</string> + <string name="recovery_error" msgid="4550265746256727080">"Fout!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-am/strings.xml b/tools/recovery_l10n/res/values-am/strings.xml index 75c17fbad..cddb099bc 100644 --- a/tools/recovery_l10n/res/values-am/strings.xml +++ b/tools/recovery_l10n/res/values-am/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"የሥርዓት ዝማኔን በመጫን ላይ…"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"በመደምሰስ ላይ"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"ምንም ትዕዛዝ የለም"</string> - <string name="recovery_error" msgid="5748178989622716736">"ስህተት!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"የደህንነት ዝማኔ በመጫን ላይ"</string> + <string name="recovery_installing" msgid="7864047928003865598">"የስርዓት ዝማኔ በመጫን ላይ…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"በመደምሰስ ላይ…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"ምንም ትዕዛዝ የለም።"</string> + <string name="recovery_error" msgid="4550265746256727080">"ስህተት!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ar/strings.xml b/tools/recovery_l10n/res/values-ar/strings.xml index 601b5832b..d06b96644 100644 --- a/tools/recovery_l10n/res/values-ar/strings.xml +++ b/tools/recovery_l10n/res/values-ar/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"جارٍ تثبيت تحديث النظام"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"جارٍ محو البيانات"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"ليس هناك أي أمر"</string> - <string name="recovery_error" msgid="5748178989622716736">"خطأ!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"جارٍ تثبيت تحديث الأمان"</string> + <string name="recovery_installing" msgid="7864047928003865598">"جارٍ تثبيت تحديث النظام…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"جارٍ المسح…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"ليس هناك أي أمر."</string> + <string name="recovery_error" msgid="4550265746256727080">"خطأ!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-az-rAZ/strings.xml b/tools/recovery_l10n/res/values-az-rAZ/strings.xml index c6765a9ea..3435573dc 100644 --- a/tools/recovery_l10n/res/values-az-rAZ/strings.xml +++ b/tools/recovery_l10n/res/values-az-rAZ/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Sistem güncəlləməsi quraşdırılır..."</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Silinir"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Əmr yoxdur"</string> - <string name="recovery_error" msgid="5748178989622716736">"Xəta!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Təhlükəsizlik güncəlləməsi yüklənir"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Sistem güncəlləməsi quraşdırılır..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Silinir..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Əmr yoxdur."</string> + <string name="recovery_error" msgid="4550265746256727080">"Xəta!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-b+sr+Latn/strings.xml b/tools/recovery_l10n/res/values-b+sr+Latn/strings.xml deleted file mode 100644 index 6f433e39d..000000000 --- a/tools/recovery_l10n/res/values-b+sr+Latn/strings.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="4995089002339765600">"Instaliranje ažuriranja sistema..."</string> - <string name="recovery_erasing" msgid="3454811999717520920">"Brisanje..."</string> - <string name="recovery_no_command" msgid="3005798864326873414">"Nema komande."</string> - <string name="recovery_error" msgid="5748178989622716736">"Greška!"</string> - <string name="recovery_installing_security" msgid="241961948312007086">"Instalira se bezbednosno ažuriranje…"</string> -</resources> diff --git a/tools/recovery_l10n/res/values-be-rBY/strings.xml b/tools/recovery_l10n/res/values-be-rBY/strings.xml deleted file mode 100644 index 5decf8130..000000000 --- a/tools/recovery_l10n/res/values-be-rBY/strings.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="4995089002339765600">"Усталёўка абнаўлення сістэмы..."</string> - <string name="recovery_erasing" msgid="3454811999717520920">"Выдаленне..."</string> - <string name="recovery_no_command" msgid="3005798864326873414">"Няма каманды"</string> - <string name="recovery_error" msgid="5748178989622716736">"Памылка"</string> - <string name="recovery_installing_security" msgid="241961948312007086">"Усталёўка абнаўлення сістэмы бяспекі..."</string> -</resources> diff --git a/tools/recovery_l10n/res/values-bg/strings.xml b/tools/recovery_l10n/res/values-bg/strings.xml index 9e628a2af..004f3b93e 100644 --- a/tools/recovery_l10n/res/values-bg/strings.xml +++ b/tools/recovery_l10n/res/values-bg/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Системната актуализация се инсталира"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Изтрива се"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Без команда"</string> - <string name="recovery_error" msgid="5748178989622716736">"Грешка!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Актуализацията на сигурносттa се инсталира"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Системната актуализация се инсталира…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Изтрива се…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Без команда."</string> + <string name="recovery_error" msgid="4550265746256727080">"Грешка!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-bn-rBD/strings.xml b/tools/recovery_l10n/res/values-bn-rBD/strings.xml index 0a481faf1..4d2e590f4 100644 --- a/tools/recovery_l10n/res/values-bn-rBD/strings.xml +++ b/tools/recovery_l10n/res/values-bn-rBD/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"সিস্টেম আপডেট ইনস্টল করা হচ্ছে"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"মোছা হচ্ছে"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"কোনো আদেশ নেই"</string> - <string name="recovery_error" msgid="5748178989622716736">"ত্রুটি!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"নিরাপত্তার আপডেট ইনস্টল করা হচ্ছে"</string> + <string name="recovery_installing" msgid="7864047928003865598">"সিস্টেম আপডেট ইনস্টল করা হচ্ছে…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"মোছা হচ্ছে…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"কোনো নির্দেশ নেই।"</string> + <string name="recovery_error" msgid="4550265746256727080">"ত্রুটি!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-bs-rBA/strings.xml b/tools/recovery_l10n/res/values-bs-rBA/strings.xml deleted file mode 100644 index 8b6202a1e..000000000 --- a/tools/recovery_l10n/res/values-bs-rBA/strings.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<resources xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="4995089002339765600">"Sistem se ažurira…"</string> - <string name="recovery_erasing" msgid="3454811999717520920">"Briše se…"</string> - <string name="recovery_no_command" msgid="3005798864326873414">"Nema komande."</string> - <string name="recovery_error" msgid="5748178989622716736">"Greška!"</string> - <string name="recovery_installing_security" msgid="241961948312007086">"Instaliranje sigurnosnog ažuriranja…"</string> -</resources> diff --git a/tools/recovery_l10n/res/values-ca/strings.xml b/tools/recovery_l10n/res/values-ca/strings.xml index 3f266d2df..5d7b652c5 100644 --- a/tools/recovery_l10n/res/values-ca/strings.xml +++ b/tools/recovery_l10n/res/values-ca/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"S\'està instal·lant una actualització del sistema"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"S\'està esborrant"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"No hi ha cap ordre"</string> - <string name="recovery_error" msgid="5748178989622716736">"S\'ha produït un error"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"S\'està instal·lant una actualització de seguretat"</string> + <string name="recovery_installing" msgid="7864047928003865598">"S\'està instal·lant l\'actualització del sistema..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"S\'està esborrant..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Cap ordre."</string> + <string name="recovery_error" msgid="4550265746256727080">"Error!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-cs/strings.xml b/tools/recovery_l10n/res/values-cs/strings.xml index eb436a810..771235d04 100644 --- a/tools/recovery_l10n/res/values-cs/strings.xml +++ b/tools/recovery_l10n/res/values-cs/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Instalace aktualizace systému"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Mazání"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Žádný příkaz"</string> - <string name="recovery_error" msgid="5748178989622716736">"Chyba!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Instalace aktualizace zabezpečení"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Instalace aktualizace systému..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Mazání…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Žádný příkaz."</string> + <string name="recovery_error" msgid="4550265746256727080">"Chyba!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-da/strings.xml b/tools/recovery_l10n/res/values-da/strings.xml index c6e64a245..c28a76fbd 100644 --- a/tools/recovery_l10n/res/values-da/strings.xml +++ b/tools/recovery_l10n/res/values-da/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Installerer systemopdateringen"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Sletter"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Ingen kommando"</string> - <string name="recovery_error" msgid="5748178989622716736">"Fejl!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Installerer sikkerhedsopdateringen"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Systemopdateringen installeres…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Sletter…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Ingen kommando."</string> + <string name="recovery_error" msgid="4550265746256727080">"Fejl!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-de/strings.xml b/tools/recovery_l10n/res/values-de/strings.xml index 6b6726a23..02d259059 100644 --- a/tools/recovery_l10n/res/values-de/strings.xml +++ b/tools/recovery_l10n/res/values-de/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Systemupdate wird installiert"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Wird gelöscht"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Kein Befehl"</string> - <string name="recovery_error" msgid="5748178989622716736">"Fehler"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Sicherheitsupdate wird installiert"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Systemupdate wird installiert…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Wird gelöscht…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Kein Befehl"</string> + <string name="recovery_error" msgid="4550265746256727080">"Fehler"</string> </resources> diff --git a/tools/recovery_l10n/res/values-el/strings.xml b/tools/recovery_l10n/res/values-el/strings.xml index 4cb2da5f9..aa2626b4b 100644 --- a/tools/recovery_l10n/res/values-el/strings.xml +++ b/tools/recovery_l10n/res/values-el/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Εγκατάσταση ενημέρωσης συστήματος"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Διαγραφή"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Καμία εντολή"</string> - <string name="recovery_error" msgid="5748178989622716736">"Σφάλμα!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Εγκατάσταση ενημέρωσης ασφαλείας"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Εγκατάσταση ενημέρωσης συστήματος…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Διαγραφή…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Καμία εντολή."</string> + <string name="recovery_error" msgid="4550265746256727080">"Σφάλμα!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-en-rAU/strings.xml b/tools/recovery_l10n/res/values-en-rAU/strings.xml index dc75c2374..b70d678c1 100644 --- a/tools/recovery_l10n/res/values-en-rAU/strings.xml +++ b/tools/recovery_l10n/res/values-en-rAU/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Installing system update"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Erasing"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"No command"</string> - <string name="recovery_error" msgid="5748178989622716736">"Error!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Installing security update"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Installing system update…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Erasing…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"No command."</string> + <string name="recovery_error" msgid="4550265746256727080">"Error!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-en-rGB/strings.xml b/tools/recovery_l10n/res/values-en-rGB/strings.xml index dc75c2374..b70d678c1 100644 --- a/tools/recovery_l10n/res/values-en-rGB/strings.xml +++ b/tools/recovery_l10n/res/values-en-rGB/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Installing system update"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Erasing"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"No command"</string> - <string name="recovery_error" msgid="5748178989622716736">"Error!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Installing security update"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Installing system update…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Erasing…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"No command."</string> + <string name="recovery_error" msgid="4550265746256727080">"Error!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-en-rIN/strings.xml b/tools/recovery_l10n/res/values-en-rIN/strings.xml index dc75c2374..b70d678c1 100644 --- a/tools/recovery_l10n/res/values-en-rIN/strings.xml +++ b/tools/recovery_l10n/res/values-en-rIN/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Installing system update"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Erasing"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"No command"</string> - <string name="recovery_error" msgid="5748178989622716736">"Error!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Installing security update"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Installing system update…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Erasing…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"No command."</string> + <string name="recovery_error" msgid="4550265746256727080">"Error!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-es-rUS/strings.xml b/tools/recovery_l10n/res/values-es-rUS/strings.xml index 06b86069b..256272ac7 100644 --- a/tools/recovery_l10n/res/values-es-rUS/strings.xml +++ b/tools/recovery_l10n/res/values-es-rUS/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Instalando actualización del sistema"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Borrando"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Ningún comando"</string> - <string name="recovery_error" msgid="5748178989622716736">"Error"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Instalando actualización de seguridad"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Instalando actualización del sistema…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Borrando…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Ningún comando"</string> + <string name="recovery_error" msgid="4550265746256727080">"Error"</string> </resources> diff --git a/tools/recovery_l10n/res/values-es/strings.xml b/tools/recovery_l10n/res/values-es/strings.xml index d8618f2f4..323f05505 100644 --- a/tools/recovery_l10n/res/values-es/strings.xml +++ b/tools/recovery_l10n/res/values-es/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Instalando actualización del sistema"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Borrando"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Sin comandos"</string> - <string name="recovery_error" msgid="5748178989622716736">"Error"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Instalando actualización de seguridad"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Instalando actualización del sistema…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Borrando…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Sin comandos"</string> + <string name="recovery_error" msgid="4550265746256727080">"Error"</string> </resources> diff --git a/tools/recovery_l10n/res/values-et-rEE/strings.xml b/tools/recovery_l10n/res/values-et-rEE/strings.xml index 072a9ef80..407a53d67 100644 --- a/tools/recovery_l10n/res/values-et-rEE/strings.xml +++ b/tools/recovery_l10n/res/values-et-rEE/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Süsteemivärskenduse installimine"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Kustutamine"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Käsk puudub"</string> - <string name="recovery_error" msgid="5748178989622716736">"Viga!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Turvavärskenduse installimine"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Süsteemivärskenduste installimine ..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Kustutamine ..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Käsk puudub."</string> + <string name="recovery_error" msgid="4550265746256727080">"Viga!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-eu-rES/strings.xml b/tools/recovery_l10n/res/values-eu-rES/strings.xml index 5540469d0..08d9c0672 100644 --- a/tools/recovery_l10n/res/values-eu-rES/strings.xml +++ b/tools/recovery_l10n/res/values-eu-rES/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Sistemaren eguneratzea instalatzen"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Eduki guztia ezabatzen"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Ez dago agindurik"</string> - <string name="recovery_error" msgid="5748178989622716736">"Errorea"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Segurtasun-eguneratzea instalatzen"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Sistemaren eguneratzea instalatzen…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Ezabatzen…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Ez dago agindurik."</string> + <string name="recovery_error" msgid="4550265746256727080">"Errorea!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-fa/strings.xml b/tools/recovery_l10n/res/values-fa/strings.xml index cc390ae84..dd002face 100644 --- a/tools/recovery_l10n/res/values-fa/strings.xml +++ b/tools/recovery_l10n/res/values-fa/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"در حال نصب بهروزرسانی سیستم"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"در حال پاک کردن"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"فرمانی وجود ندارد"</string> - <string name="recovery_error" msgid="5748178989622716736">"خطا!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"در حال نصب بهروزرسانی امنیتی"</string> + <string name="recovery_installing" msgid="7864047928003865598">"در حال نصب بهروزرسانی سیستم ..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"پاک کردن..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"فرمانی موجود نیست."</string> + <string name="recovery_error" msgid="4550265746256727080">"خطا!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-fi/strings.xml b/tools/recovery_l10n/res/values-fi/strings.xml index 5141642c8..b77417a98 100644 --- a/tools/recovery_l10n/res/values-fi/strings.xml +++ b/tools/recovery_l10n/res/values-fi/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Asennetaan järjestelmäpäivitystä"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Tyhjennetään"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Ei komentoa"</string> - <string name="recovery_error" msgid="5748178989622716736">"Virhe!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Asennetaan tietoturvapäivitystä"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Asennetaan järjestelmäpäivitystä..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Tyhjennetään..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Ei komentoa."</string> + <string name="recovery_error" msgid="4550265746256727080">"Virhe!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-fr-rCA/strings.xml b/tools/recovery_l10n/res/values-fr-rCA/strings.xml index b2415290b..f2a85d86a 100644 --- a/tools/recovery_l10n/res/values-fr-rCA/strings.xml +++ b/tools/recovery_l10n/res/values-fr-rCA/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Installation de la mise à jour du système en cours…"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Suppression en cours..."</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Aucune commande"</string> - <string name="recovery_error" msgid="5748178989622716736">"Erreur!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Installation de la mise à jour de sécurité en cours..."</string> + <string name="recovery_installing" msgid="7864047928003865598">"Installation de la mise à jour du système en cours…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Effacement en cours…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Aucune commande."</string> + <string name="recovery_error" msgid="4550265746256727080">"Erreur!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-fr/strings.xml b/tools/recovery_l10n/res/values-fr/strings.xml index f0472b5ac..cdb4a2668 100644 --- a/tools/recovery_l10n/res/values-fr/strings.xml +++ b/tools/recovery_l10n/res/values-fr/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Installation de la mise à jour du système…"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Suppression…"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Aucune commande"</string> - <string name="recovery_error" msgid="5748178989622716736">"Erreur !"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Installation de la mise à jour de sécurité…"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Installation de la mise à jour du système en cours…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Effacement en cours…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Aucune commande."</string> + <string name="recovery_error" msgid="4550265746256727080">"Erreur !"</string> </resources> diff --git a/tools/recovery_l10n/res/values-gl-rES/strings.xml b/tools/recovery_l10n/res/values-gl-rES/strings.xml index 42b2016c2..7546fbda4 100644 --- a/tools/recovery_l10n/res/values-gl-rES/strings.xml +++ b/tools/recovery_l10n/res/values-gl-rES/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Instalando actualización do sistema"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Borrando"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Non hai ningún comando"</string> - <string name="recovery_error" msgid="5748178989622716736">"Erro"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Instalando actualización de seguranza"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Instalando actualización do sistema..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Borrando..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Ningún comando"</string> + <string name="recovery_error" msgid="4550265746256727080">"Erro"</string> </resources> diff --git a/tools/recovery_l10n/res/values-gu-rIN/strings.xml b/tools/recovery_l10n/res/values-gu-rIN/strings.xml index 2355a0f4f..a364b523c 100644 --- a/tools/recovery_l10n/res/values-gu-rIN/strings.xml +++ b/tools/recovery_l10n/res/values-gu-rIN/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"સિસ્ટમ અપડેટ ઇન્સ્ટૉલ કરી રહ્યાં છે"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"કાઢી નાખી રહ્યું છે"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"કોઈ આદેશ નથી"</string> - <string name="recovery_error" msgid="5748178989622716736">"ભૂલ!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"સુરક્ષા અપડેટ ઇન્સ્ટૉલ કરી રહ્યાં છે"</string> + <string name="recovery_installing" msgid="7864047928003865598">"સિસ્ટમ અપડેટ ઇન્સ્ટોલ કરી રહ્યાં છે…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"કાઢી નાખી રહ્યાં છે…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"કોઈ આદેશ નથી."</string> + <string name="recovery_error" msgid="4550265746256727080">"ભૂલ!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-hi/strings.xml b/tools/recovery_l10n/res/values-hi/strings.xml index de8757848..a470d12b6 100644 --- a/tools/recovery_l10n/res/values-hi/strings.xml +++ b/tools/recovery_l10n/res/values-hi/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"सिस्टम अपडेट इंस्टॉल किया जा रहा है"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"मिटाया जा रहा है"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"कोई आदेश नहीं"</string> - <string name="recovery_error" msgid="5748178989622716736">"त्रुटि!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"सुरक्षा अपडेट इंस्टॉल किया जा रहा है"</string> + <string name="recovery_installing" msgid="7864047928003865598">"सिस्टम के बारे में नई जानकारी मिल रही है…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"मिटा रहा है…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"कोई आदेश नहीं."</string> + <string name="recovery_error" msgid="4550265746256727080">"त्रुटि!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-hr/strings.xml b/tools/recovery_l10n/res/values-hr/strings.xml index 3b75ff115..56225c015 100644 --- a/tools/recovery_l10n/res/values-hr/strings.xml +++ b/tools/recovery_l10n/res/values-hr/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Instaliranje ažuriranja sustava"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Brisanje"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Nema naredbe"</string> - <string name="recovery_error" msgid="5748178989622716736">"Pogreška!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Instaliranje sigurnosnog ažuriranja"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Instaliranje ažuriranja sustava…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Brisanje…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Nema naredbe."</string> + <string name="recovery_error" msgid="4550265746256727080">"Pogreška!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-hu/strings.xml b/tools/recovery_l10n/res/values-hu/strings.xml index 12d4d9fe7..a64f50176 100644 --- a/tools/recovery_l10n/res/values-hu/strings.xml +++ b/tools/recovery_l10n/res/values-hu/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Rendszerfrissítés telepítése"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Törlés"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Nincs parancs"</string> - <string name="recovery_error" msgid="5748178989622716736">"Hiba!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Biztonsági frissítés telepítése"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Rendszerfrissítés telepítése..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Törlés..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Nincs parancs."</string> + <string name="recovery_error" msgid="4550265746256727080">"Hiba!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-hy-rAM/strings.xml b/tools/recovery_l10n/res/values-hy-rAM/strings.xml index 9d62bb763..7babe80c8 100644 --- a/tools/recovery_l10n/res/values-hy-rAM/strings.xml +++ b/tools/recovery_l10n/res/values-hy-rAM/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Համակարգի թարմացման տեղադրում"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Ջնջում"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Հրամանը տրված չէ"</string> - <string name="recovery_error" msgid="5748178989622716736">"Սխալ"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Անվտանգության թարմացման տեղադրում"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Համակարգի թարմացման տեղադրում…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Ջնջում…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Հրամանը տրված չէ:"</string> + <string name="recovery_error" msgid="4550265746256727080">"Սխալ"</string> </resources> diff --git a/tools/recovery_l10n/res/values-in/strings.xml b/tools/recovery_l10n/res/values-in/strings.xml index 0e56e0dd9..93f9c2876 100644 --- a/tools/recovery_l10n/res/values-in/strings.xml +++ b/tools/recovery_l10n/res/values-in/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Memasang pembaruan sistem"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Menghapus"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Tidak ada perintah"</string> - <string name="recovery_error" msgid="5748178989622716736">"Error!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Memasang pembaruan keamanan"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Memasang pembaruan sistem…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Menghapus..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Tidak ada perintah."</string> + <string name="recovery_error" msgid="4550265746256727080">"Kesalahan!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-is-rIS/strings.xml b/tools/recovery_l10n/res/values-is-rIS/strings.xml index 5065b6522..926e85132 100644 --- a/tools/recovery_l10n/res/values-is-rIS/strings.xml +++ b/tools/recovery_l10n/res/values-is-rIS/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Setur upp kerfisuppfærslu"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Eyðir"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Engin skipun"</string> - <string name="recovery_error" msgid="5748178989622716736">"Villa!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Setur upp öryggisuppfærslu"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Setur upp kerfisuppfærslu…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Þurrkar út…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Engin skipun."</string> + <string name="recovery_error" msgid="4550265746256727080">"Villa!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-it/strings.xml b/tools/recovery_l10n/res/values-it/strings.xml index 2c0364e60..9defe36bd 100644 --- a/tools/recovery_l10n/res/values-it/strings.xml +++ b/tools/recovery_l10n/res/values-it/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Installazione aggiornamento di sistema…"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Cancellazione…"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Nessun comando"</string> - <string name="recovery_error" msgid="5748178989622716736">"Errore!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Installazione aggiornamento sicurezza…"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Installazione aggiornamento di sistema…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Cancellazione…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Nessun comando."</string> + <string name="recovery_error" msgid="4550265746256727080">"Errore!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-iw/strings.xml b/tools/recovery_l10n/res/values-iw/strings.xml index ea5e6f2c9..e43bb20a9 100644 --- a/tools/recovery_l10n/res/values-iw/strings.xml +++ b/tools/recovery_l10n/res/values-iw/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"מתקין עדכון מערכת"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"מוחק"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"אין פקודה"</string> - <string name="recovery_error" msgid="5748178989622716736">"שגיאה!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"מתקין עדכון אבטחה"</string> + <string name="recovery_installing" msgid="7864047928003865598">"מתקין עדכון מערכת…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"מוחק…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"אין פקודה."</string> + <string name="recovery_error" msgid="4550265746256727080">"שגיאה!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ja/strings.xml b/tools/recovery_l10n/res/values-ja/strings.xml index 36e029b0f..da0fa623a 100644 --- a/tools/recovery_l10n/res/values-ja/strings.xml +++ b/tools/recovery_l10n/res/values-ja/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"システム アップデートをインストールしています"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"消去しています"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"コマンドが指定されていません"</string> - <string name="recovery_error" msgid="5748178989622716736">"エラーが発生しました。"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"セキュリティ アップデートをインストールしています"</string> + <string name="recovery_installing" msgid="7864047928003865598">"システムアップデートをインストールしています…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"消去しています…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"コマンドが指定されていません。"</string> + <string name="recovery_error" msgid="4550265746256727080">"エラーです"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ka-rGE/strings.xml b/tools/recovery_l10n/res/values-ka-rGE/strings.xml index 6a46b3677..2d27c1799 100644 --- a/tools/recovery_l10n/res/values-ka-rGE/strings.xml +++ b/tools/recovery_l10n/res/values-ka-rGE/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"მიმდინარეობს სისტემის განახლების ინსტალაცია"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"მიმდინარეობს ამოშლა"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"ბრძანება არ არის"</string> - <string name="recovery_error" msgid="5748178989622716736">"წარმოიქმნა შეცდომა!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"მიმდინარეობს უსაფრთხოების განახლების ინსტალაცია"</string> + <string name="recovery_installing" msgid="7864047928003865598">"სისტემის განახლების დაყენება…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"მიმდინარეობს წაშლა…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"ბრძანება არ არის."</string> + <string name="recovery_error" msgid="4550265746256727080">"შეცდომა!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-kk-rKZ/strings.xml b/tools/recovery_l10n/res/values-kk-rKZ/strings.xml index a4bd86e66..3ca05b9eb 100644 --- a/tools/recovery_l10n/res/values-kk-rKZ/strings.xml +++ b/tools/recovery_l10n/res/values-kk-rKZ/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Жүйе жаңартуы орнатылуда"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Өшірілуде"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Пәрмен жоқ"</string> - <string name="recovery_error" msgid="5748178989622716736">"Қате!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Қауіпсіздік жаңартуы орнатылуда"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Жүйе жаңартуларын орнатуда…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Өшіруде..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Пәрмен берілген жоқ."</string> + <string name="recovery_error" msgid="4550265746256727080">"Қате!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-km-rKH/strings.xml b/tools/recovery_l10n/res/values-km-rKH/strings.xml index 313c0f457..0c1c272e0 100644 --- a/tools/recovery_l10n/res/values-km-rKH/strings.xml +++ b/tools/recovery_l10n/res/values-km-rKH/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"កំពុងអាប់ដេតប្រព័ន្ធ"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"លុប"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"គ្មានពាក្យបញ្ជាទេ"</string> - <string name="recovery_error" msgid="5748178989622716736">"កំហុស!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"កំពុងដំឡើងការអាប់ដេតសុវត្ថិភាព"</string> + <string name="recovery_installing" msgid="7864047928003865598">"កំពុងដំឡើងបច្ចុប្បន្នភាពប្រព័ន្ធ…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"កំពុងលុប…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"គ្មានពាក្យបញ្ជា។"</string> + <string name="recovery_error" msgid="4550265746256727080">"កំហុស!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-kn-rIN/strings.xml b/tools/recovery_l10n/res/values-kn-rIN/strings.xml index 5bf6260ee..be25d7a9d 100644 --- a/tools/recovery_l10n/res/values-kn-rIN/strings.xml +++ b/tools/recovery_l10n/res/values-kn-rIN/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"ಸಿಸ್ಟಂ ಅಪ್ಡೇಟ್ ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"ಅಳಿಸಲಾಗುತ್ತಿದೆ"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"ಯಾವುದೇ ಆದೇಶವಿಲ್ಲ"</string> - <string name="recovery_error" msgid="5748178989622716736">"ದೋಷ!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"ಭದ್ರತೆಯ ಅಪ್ಡೇಟ್ ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ"</string> + <string name="recovery_installing" msgid="7864047928003865598">"ಸಿಸ್ಟಂ ನವೀಕರಣವನ್ನು ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"ಅಳಿಸಲಾಗುತ್ತಿದೆ…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"ಯಾವುದೇ ಆದೇಶವಿಲ್ಲ."</string> + <string name="recovery_error" msgid="4550265746256727080">"ದೋಷ!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ko/strings.xml b/tools/recovery_l10n/res/values-ko/strings.xml index aca13bbe7..e46a87606 100644 --- a/tools/recovery_l10n/res/values-ko/strings.xml +++ b/tools/recovery_l10n/res/values-ko/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"시스템 업데이트 설치"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"지우는 중"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"명령어 없음"</string> - <string name="recovery_error" msgid="5748178989622716736">"오류!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"보안 업데이트 설치 중"</string> + <string name="recovery_installing" msgid="7864047928003865598">"시스템 업데이트 설치 중…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"지우는 중…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"명령어가 없습니다."</string> + <string name="recovery_error" msgid="4550265746256727080">"오류!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ky-rKG/strings.xml b/tools/recovery_l10n/res/values-ky-rKG/strings.xml index 0a6bd783a..e2ced27a4 100644 --- a/tools/recovery_l10n/res/values-ky-rKG/strings.xml +++ b/tools/recovery_l10n/res/values-ky-rKG/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Тутум жаңыртуусу орнотулууда"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Тазаланууда"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Буйрук берилген жок"</string> - <string name="recovery_error" msgid="5748178989622716736">"Ката!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Коопсуздук жаңыртуусу орнотулууда"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Системдик жаңыртууларды орнотуу…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Өчүрүлүүдө…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Буйрук берилген жок."</string> + <string name="recovery_error" msgid="4550265746256727080">"Ката!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-lo-rLA/strings.xml b/tools/recovery_l10n/res/values-lo-rLA/strings.xml index d3dbb3970..5880cca75 100644 --- a/tools/recovery_l10n/res/values-lo-rLA/strings.xml +++ b/tools/recovery_l10n/res/values-lo-rLA/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"ກຳລັງຕິດຕັ້ງການອັບເດດລະບົບ"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"ກຳລັງລຶບ"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"ບໍ່ມີຄຳສັ່ງ"</string> - <string name="recovery_error" msgid="5748178989622716736">"ຜິດພາດ!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"ກຳລັງຕິດຕັ້ງອັບເດດຄວາມປອດໄພ"</string> + <string name="recovery_installing" msgid="7864047928003865598">"ກຳລັງຕິດຕັ້ງການອັບເດດລະບົບ..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"ກຳລັງລຶບ..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"ບໍ່ມີຄຳສັ່ງ."</string> + <string name="recovery_error" msgid="4550265746256727080">"ຜິດພາດ!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-lt/strings.xml b/tools/recovery_l10n/res/values-lt/strings.xml index d5d5e88fd..957ac7557 100644 --- a/tools/recovery_l10n/res/values-lt/strings.xml +++ b/tools/recovery_l10n/res/values-lt/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Diegiamas sistemos naujinys"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Ištrinama"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Nėra jokių komandų"</string> - <string name="recovery_error" msgid="5748178989622716736">"Klaida!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Diegiamas saugos naujinys"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Diegiamas sistemos naujinys…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Ištrinama…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Nėra komandos."</string> + <string name="recovery_error" msgid="4550265746256727080">"Klaida!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-lv/strings.xml b/tools/recovery_l10n/res/values-lv/strings.xml index d877f6a61..c5d5b93a6 100644 --- a/tools/recovery_l10n/res/values-lv/strings.xml +++ b/tools/recovery_l10n/res/values-lv/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Notiek sistēmas atjauninājuma instalēšana"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Notiek dzēšana"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Nav nevienas komandas"</string> - <string name="recovery_error" msgid="5748178989622716736">"Kļūda!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Notiek drošības atjauninājuma instalēšana"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Notiek sistēmas atjauninājuma instalēšana..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Notiek dzēšana..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Nav nevienas komandas."</string> + <string name="recovery_error" msgid="4550265746256727080">"Kļūda!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-mk-rMK/strings.xml b/tools/recovery_l10n/res/values-mk-rMK/strings.xml index 351459730..d91a67cac 100644 --- a/tools/recovery_l10n/res/values-mk-rMK/strings.xml +++ b/tools/recovery_l10n/res/values-mk-rMK/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Се инсталира ажурирање на системот"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Се брише"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Нема наредба"</string> - <string name="recovery_error" msgid="5748178989622716736">"Грешка!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Се инсталира безбедносно ажурирање"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Се инсталира ажурирање на системот..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Се брише..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Нема наредба."</string> + <string name="recovery_error" msgid="4550265746256727080">"Грешка!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ml-rIN/strings.xml b/tools/recovery_l10n/res/values-ml-rIN/strings.xml index b506e2530..38ebcd120 100644 --- a/tools/recovery_l10n/res/values-ml-rIN/strings.xml +++ b/tools/recovery_l10n/res/values-ml-rIN/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"സിസ്റ്റം അപ്ഡേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യുന്നു"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"മായ്ക്കുന്നു"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"കമാൻഡ് ഒന്നുമില്ല"</string> - <string name="recovery_error" msgid="5748178989622716736">"പിശക്!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"സുരക്ഷാ അപ്ഡേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യുന്നു"</string> + <string name="recovery_installing" msgid="7864047928003865598">"സിസ്റ്റം അപ്ഡേറ്റ് ഇൻസ്റ്റാളുചെയ്യുന്നു…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"മായ്ക്കുന്നു…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"കമാൻഡ് ഒന്നുമില്ല."</string> + <string name="recovery_error" msgid="4550265746256727080">"പിശക്!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-mn-rMN/strings.xml b/tools/recovery_l10n/res/values-mn-rMN/strings.xml index e3dd2e90e..463cafeaf 100644 --- a/tools/recovery_l10n/res/values-mn-rMN/strings.xml +++ b/tools/recovery_l10n/res/values-mn-rMN/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Системийн шинэчлэлтийг суулгаж байна"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Устгаж байна"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Тушаал байхгүй"</string> - <string name="recovery_error" msgid="5748178989622716736">"Алдаа!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Аюулгүй байдлын шинэчлэлтийг суулгаж байна"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Системийн шинэчлэлтийг суулгаж байна…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Арилгаж байна…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Команд байхгүй."</string> + <string name="recovery_error" msgid="4550265746256727080">"Алдаа!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-mr-rIN/strings.xml b/tools/recovery_l10n/res/values-mr-rIN/strings.xml index 8cf86f773..25c5d0c57 100644 --- a/tools/recovery_l10n/res/values-mr-rIN/strings.xml +++ b/tools/recovery_l10n/res/values-mr-rIN/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"सिस्टम अद्यतन स्थापित करीत आहे"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"मिटवत आहे"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"कोणताही आदेश नाही"</string> - <string name="recovery_error" msgid="5748178989622716736">"त्रुटी!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"सुरक्षा अद्यतन स्थापित करीत आहे"</string> + <string name="recovery_installing" msgid="7864047928003865598">"सिस्टम अद्यतन स्थापित करीत आहे..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"मिटवित आहे…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"कोणताही आदेश नाही."</string> + <string name="recovery_error" msgid="4550265746256727080">"त्रुटी!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ms-rMY/strings.xml b/tools/recovery_l10n/res/values-ms-rMY/strings.xml index 0e24ac4e1..f5635910e 100644 --- a/tools/recovery_l10n/res/values-ms-rMY/strings.xml +++ b/tools/recovery_l10n/res/values-ms-rMY/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Memasang kemas kini sistem"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Memadam"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Tiada perintah"</string> - <string name="recovery_error" msgid="5748178989622716736">"Ralat!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Memasang kemas kini keselamatan"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Memasang kemas kini sistem..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Memadam..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Tiada arahan."</string> + <string name="recovery_error" msgid="4550265746256727080">"Ralat!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-my-rMM/strings.xml b/tools/recovery_l10n/res/values-my-rMM/strings.xml index f13752461..4091b1923 100644 --- a/tools/recovery_l10n/res/values-my-rMM/strings.xml +++ b/tools/recovery_l10n/res/values-my-rMM/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"စနစ်အပ်ဒိတ်ကို ထည့်သွင်းနေသည်"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"ဖျက်နေသည်"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"ညွှန်ကြားချက်မပေးထားပါ"</string> - <string name="recovery_error" msgid="5748178989622716736">"မှားနေပါသည်!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"လုံခြုံရေး အပ်ဒိတ်ကို ထည့်သွင်းနေသည်"</string> + <string name="recovery_installing" msgid="7864047928003865598">"စနစ်အား အဆင့်မြှင့်ခြင်း လုပ်ဆောင်နေသည်…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"ဖျက်နေသည် ..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"ညွှန်ကြားချက်မပေးထားပါ"</string> + <string name="recovery_error" msgid="4550265746256727080">"မှားနေပါသည်!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-nb/strings.xml b/tools/recovery_l10n/res/values-nb/strings.xml index ad6f20e46..4e89ad7c8 100644 --- a/tools/recovery_l10n/res/values-nb/strings.xml +++ b/tools/recovery_l10n/res/values-nb/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Installerer systemoppdateringen"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Tømmer"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Ingen kommandoer"</string> - <string name="recovery_error" msgid="5748178989622716736">"Feil!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Installerer sikkerhetsoppdateringen"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Installerer systemoppdateringen ..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Sletter ..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Ingen kommando."</string> + <string name="recovery_error" msgid="4550265746256727080">"Feil!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ne-rNP/strings.xml b/tools/recovery_l10n/res/values-ne-rNP/strings.xml index 1880e807b..835f275b4 100644 --- a/tools/recovery_l10n/res/values-ne-rNP/strings.xml +++ b/tools/recovery_l10n/res/values-ne-rNP/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"प्रणालीको अद्यावधिकलाई स्थापना गर्दै"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"मेटाउँदै"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"कुनै आदेश छैन"</string> - <string name="recovery_error" msgid="5748178989622716736">"त्रुटि!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"सुरक्षा सम्बन्धी अद्यावधिकलाई स्थापना गर्दै"</string> + <string name="recovery_installing" msgid="7864047928003865598">"प्रणाली अद्यावधिक स्थापना गर्दै..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"मेटाइदै..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"कुनै आदेश छैन।"</string> + <string name="recovery_error" msgid="4550265746256727080">"त्रुटि!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-nl/strings.xml b/tools/recovery_l10n/res/values-nl/strings.xml index 0d6c15abb..be80a6b5c 100644 --- a/tools/recovery_l10n/res/values-nl/strings.xml +++ b/tools/recovery_l10n/res/values-nl/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Systeemupdate installeren"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Wissen"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Geen opdracht"</string> - <string name="recovery_error" msgid="5748178989622716736">"Fout!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Beveiligingsupdate installeren"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Systeemupdate installeren…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Wissen…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Geen opdracht."</string> + <string name="recovery_error" msgid="4550265746256727080">"Fout!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-pa-rIN/strings.xml b/tools/recovery_l10n/res/values-pa-rIN/strings.xml index 8564c9c36..39ef32f55 100644 --- a/tools/recovery_l10n/res/values-pa-rIN/strings.xml +++ b/tools/recovery_l10n/res/values-pa-rIN/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"ਸਿਸਟਮ ਅੱਪਡੇਟ ਸਥਾਪਤ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"ਮਿਟਾਈ ਜਾ ਰਹੀ ਹੈ"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"ਕੋਈ ਕਮਾਂਡ ਨਹੀਂ"</string> - <string name="recovery_error" msgid="5748178989622716736">"ਅਸ਼ੁੱਧੀ!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"ਸੁਰੱਖਿਆ ਅੱਪਡੇਟ ਸਥਾਪਤ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string> + <string name="recovery_installing" msgid="7864047928003865598">"ਸਿਸਟਮ ਅਪਡੇਟ ਇੰਸਟੌਲ ਕਰ ਰਿਹਾ ਹੈ…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"ਹਟਾ ਰਿਹਾ ਹੈ…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"ਕੋਈ ਕਮਾਂਡ ਨਹੀਂ।"</string> + <string name="recovery_error" msgid="4550265746256727080">"ਅਸ਼ੁੱਧੀ!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-pl/strings.xml b/tools/recovery_l10n/res/values-pl/strings.xml index 8d6db388d..b1e5b7b66 100644 --- a/tools/recovery_l10n/res/values-pl/strings.xml +++ b/tools/recovery_l10n/res/values-pl/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Instaluję aktualizację systemu"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Kasuję"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Brak polecenia"</string> - <string name="recovery_error" msgid="5748178989622716736">"Błąd"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Instaluję aktualizację zabezpieczeń"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Instaluję aktualizację systemu…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Usuwam…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Brak polecenia."</string> + <string name="recovery_error" msgid="4550265746256727080">"Błąd"</string> </resources> diff --git a/tools/recovery_l10n/res/values-pt-rBR/strings.xml b/tools/recovery_l10n/res/values-pt-rBR/strings.xml index b72704385..3cc57234e 100644 --- a/tools/recovery_l10n/res/values-pt-rBR/strings.xml +++ b/tools/recovery_l10n/res/values-pt-rBR/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Instalando atualização do sistema"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Apagando"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Nenhum comando"</string> - <string name="recovery_error" msgid="5748178989622716736">"Erro!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Instalando atualização de segurança"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Instalando atualização do sistema..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Apagando..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Nenhum comando."</string> + <string name="recovery_error" msgid="4550265746256727080">"Erro!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-pt-rPT/strings.xml b/tools/recovery_l10n/res/values-pt-rPT/strings.xml index 981463739..7d6bc18a9 100644 --- a/tools/recovery_l10n/res/values-pt-rPT/strings.xml +++ b/tools/recovery_l10n/res/values-pt-rPT/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"A instalar atualização do sistema"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"A apagar"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Nenhum comando"</string> - <string name="recovery_error" msgid="5748178989622716736">"Erro!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"A instalar atualização de segurança"</string> + <string name="recovery_installing" msgid="7864047928003865598">"A instalar a atualização do sistema..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"A apagar…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Nenhum comando."</string> + <string name="recovery_error" msgid="4550265746256727080">"Erro!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-pt/strings.xml b/tools/recovery_l10n/res/values-pt/strings.xml index b72704385..3cc57234e 100644 --- a/tools/recovery_l10n/res/values-pt/strings.xml +++ b/tools/recovery_l10n/res/values-pt/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Instalando atualização do sistema"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Apagando"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Nenhum comando"</string> - <string name="recovery_error" msgid="5748178989622716736">"Erro!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Instalando atualização de segurança"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Instalando atualização do sistema..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Apagando..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Nenhum comando."</string> + <string name="recovery_error" msgid="4550265746256727080">"Erro!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ro/strings.xml b/tools/recovery_l10n/res/values-ro/strings.xml index 8032865b8..ad924da08 100644 --- a/tools/recovery_l10n/res/values-ro/strings.xml +++ b/tools/recovery_l10n/res/values-ro/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Se instalează actualizarea de sistem"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Se șterge"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Nicio comandă"</string> - <string name="recovery_error" msgid="5748178989622716736">"Eroare!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Se instalează actualizarea de securitate"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Se instalează actualizarea de sistem…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Se efectuează ștergerea…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Nicio comandă."</string> + <string name="recovery_error" msgid="4550265746256727080">"Eroare!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ru/strings.xml b/tools/recovery_l10n/res/values-ru/strings.xml index feebecf31..de0da4004 100644 --- a/tools/recovery_l10n/res/values-ru/strings.xml +++ b/tools/recovery_l10n/res/values-ru/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Установка обновления системы…"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Удаление…"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Команды нет"</string> - <string name="recovery_error" msgid="5748178989622716736">"Ошибка"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Установка обновления системы безопасности…"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Установка обновления системы…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Удаление…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Команды нет"</string> + <string name="recovery_error" msgid="4550265746256727080">"Ошибка"</string> </resources> diff --git a/tools/recovery_l10n/res/values-si-rLK/strings.xml b/tools/recovery_l10n/res/values-si-rLK/strings.xml index 456cdc567..e717a9762 100644 --- a/tools/recovery_l10n/res/values-si-rLK/strings.xml +++ b/tools/recovery_l10n/res/values-si-rLK/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"පද්ධති යාවත්කාලීනය ස්ථාපනය කරමින්"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"මකමින්"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"විධානයක් නොමැත"</string> - <string name="recovery_error" msgid="5748178989622716736">"දෝෂය!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"ආරක්ෂක යාවත්කාලීනය ස්ථාපනය කරමින්"</string> + <string name="recovery_installing" msgid="7864047928003865598">"පද්ධති යාවත්කාල ස්ථාපනය කරමින්…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"මකමින්...."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"විධානයක් නොමැත."</string> + <string name="recovery_error" msgid="4550265746256727080">"දෝෂය!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-sk/strings.xml b/tools/recovery_l10n/res/values-sk/strings.xml index b15f3802b..cae6bce7c 100644 --- a/tools/recovery_l10n/res/values-sk/strings.xml +++ b/tools/recovery_l10n/res/values-sk/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Inštaluje sa aktualizácia systému"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Prebieha vymazávanie"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Žiadny príkaz"</string> - <string name="recovery_error" msgid="5748178989622716736">"Chyba!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Inštaluje sa bezpečnostná aktualizácia"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Inštalácia aktualizácie systému..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Prebieha mazanie..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Žiadny príkaz."</string> + <string name="recovery_error" msgid="4550265746256727080">"Chyba!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-sl/strings.xml b/tools/recovery_l10n/res/values-sl/strings.xml index d608b7506..3f8d46fe6 100644 --- a/tools/recovery_l10n/res/values-sl/strings.xml +++ b/tools/recovery_l10n/res/values-sl/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Nameščanje posodobitve sistema"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Brisanje"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Ni ukaza"</string> - <string name="recovery_error" msgid="5748178989622716736">"Napaka"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Nameščanje varnostne posodobitve"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Namestitev posodobitve sistema ..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Brisanje ..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Ni ukaza"</string> + <string name="recovery_error" msgid="4550265746256727080">"Napaka"</string> </resources> diff --git a/tools/recovery_l10n/res/values-sq-rAL/strings.xml b/tools/recovery_l10n/res/values-sq-rAL/strings.xml index 1156931fb..29f8ef592 100644 --- a/tools/recovery_l10n/res/values-sq-rAL/strings.xml +++ b/tools/recovery_l10n/res/values-sq-rAL/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Po instalon përditësimin e sistemit"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Po spastron"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Nuk ka komanda"</string> - <string name="recovery_error" msgid="5748178989622716736">"Gabim!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Po instalon përditësimin e sigurisë"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Po instalon përditësimin e sistemit..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Po spastron..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Nuk ka komanda."</string> + <string name="recovery_error" msgid="4550265746256727080">"Gabim!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-sr/strings.xml b/tools/recovery_l10n/res/values-sr/strings.xml index a593d8faa..955326053 100644 --- a/tools/recovery_l10n/res/values-sr/strings.xml +++ b/tools/recovery_l10n/res/values-sr/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Ажурирање система се инсталира"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Брише се"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Нема команде"</string> - <string name="recovery_error" msgid="5748178989622716736">"Грешка!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Инсталира се безбедносно ажурирање"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Инсталирање ажурирања система..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Брисање..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Нема команде."</string> + <string name="recovery_error" msgid="4550265746256727080">"Грешка!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-sv/strings.xml b/tools/recovery_l10n/res/values-sv/strings.xml index b33ce253f..f875d3008 100644 --- a/tools/recovery_l10n/res/values-sv/strings.xml +++ b/tools/recovery_l10n/res/values-sv/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Systemuppdatering installeras"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Rensar"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Inget kommando"</string> - <string name="recovery_error" msgid="5748178989622716736">"Fel!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Säkerhetsuppdatering installeras"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Installerar systemuppdatering ..."</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Tar bort ..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Inget kommando."</string> + <string name="recovery_error" msgid="4550265746256727080">"Fel!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-sw/strings.xml b/tools/recovery_l10n/res/values-sw/strings.xml index 156765881..1a5304649 100644 --- a/tools/recovery_l10n/res/values-sw/strings.xml +++ b/tools/recovery_l10n/res/values-sw/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Inasakinisha sasisho la mfumo"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Inafuta"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Hakuna amri"</string> - <string name="recovery_error" msgid="5748178989622716736">"Hitilafu fulani imetokea!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Inasakinisha sasisho la usalama"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Inasakinisha sasisho la mfumo…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Inafuta…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Hakuna amri."</string> + <string name="recovery_error" msgid="4550265746256727080">"Hitilafu!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ta-rIN/strings.xml b/tools/recovery_l10n/res/values-ta-rIN/strings.xml index d49186d8d..f6f3e0e6a 100644 --- a/tools/recovery_l10n/res/values-ta-rIN/strings.xml +++ b/tools/recovery_l10n/res/values-ta-rIN/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"முறைமைப் புதுப்பிப்பை நிறுவுகிறது"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"அழிக்கிறது"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"கட்டளை இல்லை"</string> - <string name="recovery_error" msgid="5748178989622716736">"பிழை!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"பாதுகாப்புப் புதுப்பிப்பை நிறுவுகிறது"</string> + <string name="recovery_installing" msgid="7864047928003865598">"முறைமை புதுப்பிப்பை நிறுவுகிறது…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"அழிக்கிறது…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"கட்டளை இல்லை."</string> + <string name="recovery_error" msgid="4550265746256727080">"பிழை!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-te-rIN/strings.xml b/tools/recovery_l10n/res/values-te-rIN/strings.xml index cfb02c915..6d0d17af5 100644 --- a/tools/recovery_l10n/res/values-te-rIN/strings.xml +++ b/tools/recovery_l10n/res/values-te-rIN/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"సిస్టమ్ నవీకరణను ఇన్స్టాల్ చేస్తోంది"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"డేటాను తొలగిస్తోంది"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"ఆదేశం లేదు"</string> - <string name="recovery_error" msgid="5748178989622716736">"లోపం సంభవించింది!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"భద్రతా నవీకరణను ఇన్స్టాల్ చేస్తోంది"</string> + <string name="recovery_installing" msgid="7864047928003865598">"సిస్టమ్ నవీకరణను ఇన్స్టాల్ చేస్తోంది…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"ఎరేజ్ చేస్తోంది…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"ఆదేశం లేదు."</string> + <string name="recovery_error" msgid="4550265746256727080">"లోపం!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-th/strings.xml b/tools/recovery_l10n/res/values-th/strings.xml index 155affea0..bcdfa2b25 100644 --- a/tools/recovery_l10n/res/values-th/strings.xml +++ b/tools/recovery_l10n/res/values-th/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"กำลังติดตั้งการอัปเดตระบบ"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"กำลังลบ"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"ไม่มีคำสั่ง"</string> - <string name="recovery_error" msgid="5748178989622716736">"ข้อผิดพลาด!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"กำลังติดตั้งการอัปเดตความปลอดภัย"</string> + <string name="recovery_installing" msgid="7864047928003865598">"กำลังติดตั้งการอัปเดตระบบ…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"กำลังลบ…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"ไม่มีคำสั่ง"</string> + <string name="recovery_error" msgid="4550265746256727080">"ข้อผิดพลาด!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-tl/strings.xml b/tools/recovery_l10n/res/values-tl/strings.xml index 555b42b8d..be2ba264c 100644 --- a/tools/recovery_l10n/res/values-tl/strings.xml +++ b/tools/recovery_l10n/res/values-tl/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Nag-i-install ng pag-update ng system"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Binubura"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Walang command"</string> - <string name="recovery_error" msgid="5748178989622716736">"Error!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Nag-i-install ng update sa seguridad"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Ini-install ang update sa system…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Binubura…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Walang command."</string> + <string name="recovery_error" msgid="4550265746256727080">"Error!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-tr/strings.xml b/tools/recovery_l10n/res/values-tr/strings.xml index 5387cb2ae..8629029ca 100644 --- a/tools/recovery_l10n/res/values-tr/strings.xml +++ b/tools/recovery_l10n/res/values-tr/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Sistem güncellemesi yükleniyor"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Siliniyor"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Komut yok"</string> - <string name="recovery_error" msgid="5748178989622716736">"Hata!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Güvenlik güncellemesi yükleniyor"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Sistem güncellemesi yükleniyor…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Siliniyor…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Komut yok."</string> + <string name="recovery_error" msgid="4550265746256727080">"Hata!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-uk/strings.xml b/tools/recovery_l10n/res/values-uk/strings.xml index 0c2fa164a..762c06ff3 100644 --- a/tools/recovery_l10n/res/values-uk/strings.xml +++ b/tools/recovery_l10n/res/values-uk/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Установлюється оновлення системи"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Стирання"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Немає команди"</string> - <string name="recovery_error" msgid="5748178989622716736">"Помилка!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Установлюється оновлення системи безпеки"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Встановлення оновлення системи…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Стирання…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Немає команди."</string> + <string name="recovery_error" msgid="4550265746256727080">"Помилка!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-ur-rPK/strings.xml b/tools/recovery_l10n/res/values-ur-rPK/strings.xml index 12e32fbc1..dc6eb6aa1 100644 --- a/tools/recovery_l10n/res/values-ur-rPK/strings.xml +++ b/tools/recovery_l10n/res/values-ur-rPK/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"سسٹم اپ ڈیٹ انسٹال ہو رہی ہے"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"صاف ہو رہا ہے"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"کوئی کمانڈ نہیں ہے"</string> - <string name="recovery_error" msgid="5748178989622716736">"خرابی!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"سیکیورٹی اپ ڈیٹ انسٹال ہو رہی ہے"</string> + <string name="recovery_installing" msgid="7864047928003865598">"سسٹم اپ ڈیٹ انسٹال ہو رہا ہے…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"صاف کر رہا ہے…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"کوئی کمانڈ نہیں ہے۔"</string> + <string name="recovery_error" msgid="4550265746256727080">"خرابی!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-uz-rUZ/strings.xml b/tools/recovery_l10n/res/values-uz-rUZ/strings.xml index 2c309d646..287448418 100644 --- a/tools/recovery_l10n/res/values-uz-rUZ/strings.xml +++ b/tools/recovery_l10n/res/values-uz-rUZ/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Tizim yangilanishi o‘rnatilmoqda"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Tozalanmoqda…"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Buyruq yo‘q"</string> - <string name="recovery_error" msgid="5748178989622716736">"Xato!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Xavfsizlik yangilanishi o‘rnatilmoqda"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Tizim yangilanishi o‘rnatilmoqda…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Tozalanmoqda…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Buyruq yo‘q."</string> + <string name="recovery_error" msgid="4550265746256727080">"Xato!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-vi/strings.xml b/tools/recovery_l10n/res/values-vi/strings.xml index c77d0c8c2..ab4005b7f 100644 --- a/tools/recovery_l10n/res/values-vi/strings.xml +++ b/tools/recovery_l10n/res/values-vi/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Đang cài đặt bản cập nhật hệ thống"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Đang xóa"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Không có lệnh nào"</string> - <string name="recovery_error" msgid="5748178989622716736">"Lỗi!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Đang cài đặt bản cập nhật bảo mật"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Đang cài đặt bản cập nhật hệ thống…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Đang xóa…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Không có lệnh nào."</string> + <string name="recovery_error" msgid="4550265746256727080">"Lỗi!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-zh-rCN/strings.xml b/tools/recovery_l10n/res/values-zh-rCN/strings.xml index e06149791..2e1a6f57f 100644 --- a/tools/recovery_l10n/res/values-zh-rCN/strings.xml +++ b/tools/recovery_l10n/res/values-zh-rCN/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"正在安装系统更新"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"正在清空"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"无命令"</string> - <string name="recovery_error" msgid="5748178989622716736">"出错了!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"正在安装安全更新"</string> + <string name="recovery_installing" msgid="7864047928003865598">"正在安装系统更新…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"正在清除…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"无命令。"</string> + <string name="recovery_error" msgid="4550265746256727080">"出错了!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-zh-rHK/strings.xml b/tools/recovery_l10n/res/values-zh-rHK/strings.xml index ec3315d32..f615c7a29 100644 --- a/tools/recovery_l10n/res/values-zh-rHK/strings.xml +++ b/tools/recovery_l10n/res/values-zh-rHK/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"正在安裝系統更新"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"正在清除"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"沒有指令"</string> - <string name="recovery_error" msgid="5748178989622716736">"錯誤!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"正在安裝安全性更新"</string> + <string name="recovery_installing" msgid="7864047928003865598">"正在安裝系統更新…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"正在清除…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"沒有指令。"</string> + <string name="recovery_error" msgid="4550265746256727080">"錯誤!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-zh-rTW/strings.xml b/tools/recovery_l10n/res/values-zh-rTW/strings.xml index 78eae2429..f3f6a2c21 100644 --- a/tools/recovery_l10n/res/values-zh-rTW/strings.xml +++ b/tools/recovery_l10n/res/values-zh-rTW/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"正在安裝系統更新"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"清除中"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"沒有指令"</string> - <string name="recovery_error" msgid="5748178989622716736">"錯誤!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"正在安裝安全性更新"</string> + <string name="recovery_installing" msgid="7864047928003865598">"正在安裝系統更新…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"清除中..."</string> + <string name="recovery_no_command" msgid="1915703879031023455">"沒有指令。"</string> + <string name="recovery_error" msgid="4550265746256727080">"錯誤!"</string> </resources> diff --git a/tools/recovery_l10n/res/values-zu/strings.xml b/tools/recovery_l10n/res/values-zu/strings.xml index 6b815e1ab..1f904a203 100644 --- a/tools/recovery_l10n/res/values-zu/strings.xml +++ b/tools/recovery_l10n/res/values-zu/strings.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="recovery_installing" msgid="2013591905463558223">"Ifaka isibuyekezo sesistimu"</string> - <string name="recovery_erasing" msgid="7334826894904037088">"Iyasula"</string> - <string name="recovery_no_command" msgid="4465476568623024327">"Awukho umyalo"</string> - <string name="recovery_error" msgid="5748178989622716736">"Iphutha!"</string> - <string name="recovery_installing_security" msgid="9184031299717114342">"Ifaka isibuyekezo sokuphepha"</string> + <string name="recovery_installing" msgid="7864047928003865598">"Ifaka isibuyekezo sesistimu…"</string> + <string name="recovery_erasing" msgid="4612809744968710197">"Iyasula…"</string> + <string name="recovery_no_command" msgid="1915703879031023455">"Awukho umyalo."</string> + <string name="recovery_error" msgid="4550265746256727080">"Iphutha!"</string> </resources> diff --git a/uncrypt/uncrypt.cpp b/uncrypt/uncrypt.cpp index d7105a01f..5697712aa 100644 --- a/uncrypt/uncrypt.cpp +++ b/uncrypt/uncrypt.cpp @@ -109,6 +109,7 @@ #include <android-base/logging.h> #include <android-base/stringprintf.h> #include <android-base/strings.h> +#include <android-base/unique_fd.h> #include <bootloader_message_writer.h> #include <cutils/android_reboot.h> #include <cutils/properties.h> @@ -118,8 +119,6 @@ #define LOG_TAG "uncrypt" #include <log/log.h> -#include "unique_fd.h" - #define WINDOW_SIZE 5 // uncrypt provides three services: SETUP_BCB, CLEAR_BCB and UNCRYPT. @@ -237,8 +236,9 @@ static int produce_block_map(const char* path, const char* map_file, const char* return -1; } std::string tmp_map_file = std::string(map_file) + ".tmp"; - unique_fd mapfd(open(tmp_map_file.c_str(), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)); - if (!mapfd) { + android::base::unique_fd mapfd(open(tmp_map_file.c_str(), + O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)); + if (mapfd == -1) { ALOGE("failed to open %s: %s\n", tmp_map_file.c_str(), strerror(errno)); return -1; } @@ -262,9 +262,10 @@ static int produce_block_map(const char* path, const char* map_file, const char* std::vector<int> ranges; - std::string s = android::base::StringPrintf("%s\n%" PRId64 " %ld\n", - blk_dev, sb.st_size, static_cast<long>(sb.st_blksize)); - if (!android::base::WriteStringToFd(s, mapfd.get())) { + std::string s = android::base::StringPrintf("%s\n%" PRId64 " %" PRId64 "\n", + blk_dev, static_cast<int64_t>(sb.st_size), + static_cast<int64_t>(sb.st_blksize)); + if (!android::base::WriteStringToFd(s, mapfd)) { ALOGE("failed to write %s: %s", tmp_map_file.c_str(), strerror(errno)); return -1; } @@ -276,16 +277,16 @@ static int produce_block_map(const char* path, const char* map_file, const char* int head_block = 0; int head = 0, tail = 0; - unique_fd fd(open(path, O_RDONLY)); - if (!fd) { + android::base::unique_fd fd(open(path, O_RDONLY)); + if (fd == -1) { ALOGE("failed to open %s for reading: %s", path, strerror(errno)); return -1; } - unique_fd wfd(-1); + android::base::unique_fd wfd; if (encrypted) { - wfd = open(blk_dev, O_WRONLY); - if (!wfd) { + wfd.reset(open(blk_dev, O_WRONLY)); + if (wfd == -1) { ALOGE("failed to open fd for writing: %s", strerror(errno)); return -1; } @@ -304,14 +305,14 @@ static int produce_block_map(const char* path, const char* map_file, const char* if ((tail+1) % WINDOW_SIZE == head) { // write out head buffer int block = head_block; - if (ioctl(fd.get(), FIBMAP, &block) != 0) { + if (ioctl(fd, FIBMAP, &block) != 0) { ALOGE("failed to find block %d", head_block); return -1; } add_block_to_ranges(ranges, block); if (encrypted) { - if (write_at_offset(buffers[head].data(), sb.st_blksize, wfd.get(), - static_cast<off64_t>(sb.st_blksize) * block) != 0) { + if (write_at_offset(buffers[head].data(), sb.st_blksize, wfd, + static_cast<off64_t>(sb.st_blksize) * block) != 0) { return -1; } } @@ -323,7 +324,7 @@ static int produce_block_map(const char* path, const char* map_file, const char* if (encrypted) { size_t to_read = static_cast<size_t>( std::min(static_cast<off64_t>(sb.st_blksize), sb.st_size - pos)); - if (!android::base::ReadFully(fd.get(), buffers[tail].data(), to_read)) { + if (!android::base::ReadFully(fd, buffers[tail].data(), to_read)) { ALOGE("failed to read: %s", strerror(errno)); return -1; } @@ -340,14 +341,14 @@ static int produce_block_map(const char* path, const char* map_file, const char* while (head != tail) { // write out head buffer int block = head_block; - if (ioctl(fd.get(), FIBMAP, &block) != 0) { + if (ioctl(fd, FIBMAP, &block) != 0) { ALOGE("failed to find block %d", head_block); return -1; } add_block_to_ranges(ranges, block); if (encrypted) { - if (write_at_offset(buffers[head].data(), sb.st_blksize, wfd.get(), - static_cast<off64_t>(sb.st_blksize) * block) != 0) { + if (write_at_offset(buffers[head].data(), sb.st_blksize, wfd, + static_cast<off64_t>(sb.st_blksize) * block) != 0) { return -1; } } @@ -356,38 +357,36 @@ static int produce_block_map(const char* path, const char* map_file, const char* } if (!android::base::WriteStringToFd( - android::base::StringPrintf("%zu\n", ranges.size() / 2), mapfd.get())) { + android::base::StringPrintf("%zu\n", ranges.size() / 2), mapfd)) { ALOGE("failed to write %s: %s", tmp_map_file.c_str(), strerror(errno)); return -1; } for (size_t i = 0; i < ranges.size(); i += 2) { if (!android::base::WriteStringToFd( - android::base::StringPrintf("%d %d\n", ranges[i], ranges[i+1]), mapfd.get())) { + android::base::StringPrintf("%d %d\n", ranges[i], ranges[i+1]), mapfd)) { ALOGE("failed to write %s: %s", tmp_map_file.c_str(), strerror(errno)); return -1; } } - if (fsync(mapfd.get()) == -1) { + if (fsync(mapfd) == -1) { ALOGE("failed to fsync \"%s\": %s", tmp_map_file.c_str(), strerror(errno)); return -1; } - if (close(mapfd.get()) == -1) { + if (close(mapfd.release()) == -1) { ALOGE("failed to close %s: %s", tmp_map_file.c_str(), strerror(errno)); return -1; } - mapfd = -1; if (encrypted) { - if (fsync(wfd.get()) == -1) { + if (fsync(wfd) == -1) { ALOGE("failed to fsync \"%s\": %s", blk_dev, strerror(errno)); return -1; } - if (close(wfd.get()) == -1) { + if (close(wfd.release()) == -1) { ALOGE("failed to close %s: %s", blk_dev, strerror(errno)); return -1; } - wfd = -1; } if (rename(tmp_map_file.c_str(), map_file) == -1) { @@ -397,20 +396,19 @@ static int produce_block_map(const char* path, const char* map_file, const char* // Sync dir to make rename() result written to disk. std::string file_name = map_file; std::string dir_name = dirname(&file_name[0]); - unique_fd dfd(open(dir_name.c_str(), O_RDONLY | O_DIRECTORY)); - if (!dfd) { + android::base::unique_fd dfd(open(dir_name.c_str(), O_RDONLY | O_DIRECTORY)); + if (dfd == -1) { ALOGE("failed to open dir %s: %s", dir_name.c_str(), strerror(errno)); return -1; } - if (fsync(dfd.get()) == -1) { + if (fsync(dfd) == -1) { ALOGE("failed to fsync %s: %s", dir_name.c_str(), strerror(errno)); return -1; } - if (close(dfd.get()) == -1) { + if (close(dfd.release()) == -1) { ALOGE("failed to close %s: %s", dir_name.c_str(), strerror(errno)); return -1; } - dfd = -1; return 0; } @@ -549,20 +547,20 @@ int main(int argc, char** argv) { // c3. The socket is created by init when starting the service. uncrypt // will use the socket to communicate with its caller. - unique_fd service_socket(android_get_control_socket(UNCRYPT_SOCKET.c_str())); - if (!service_socket) { + android::base::unique_fd service_socket(android_get_control_socket(UNCRYPT_SOCKET.c_str())); + if (service_socket == -1) { ALOGE("failed to open socket \"%s\": %s", UNCRYPT_SOCKET.c_str(), strerror(errno)); return 1; } - fcntl(service_socket.get(), F_SETFD, FD_CLOEXEC); + fcntl(service_socket, F_SETFD, FD_CLOEXEC); - if (listen(service_socket.get(), 1) == -1) { + if (listen(service_socket, 1) == -1) { ALOGE("failed to listen on socket %d: %s", service_socket.get(), strerror(errno)); return 1; } - unique_fd socket_fd(accept4(service_socket.get(), nullptr, nullptr, SOCK_CLOEXEC)); - if (!socket_fd) { + android::base::unique_fd socket_fd(accept4(service_socket, nullptr, nullptr, SOCK_CLOEXEC)); + if (socket_fd == -1) { ALOGE("failed to accept on socket %d: %s", service_socket.get(), strerror(errno)); return 1; } @@ -570,13 +568,13 @@ int main(int argc, char** argv) { bool success = false; switch (action) { case UNCRYPT: - success = uncrypt_wrapper(input_path, map_file, socket_fd.get()); + success = uncrypt_wrapper(input_path, map_file, socket_fd); break; case SETUP_BCB: - success = setup_bcb(socket_fd.get()); + success = setup_bcb(socket_fd); break; case CLEAR_BCB: - success = clear_bcb(socket_fd.get()); + success = clear_bcb(socket_fd); break; default: // Should never happen. ALOGE("Invalid uncrypt action code: %d", action); @@ -587,7 +585,7 @@ int main(int argc, char** argv) { // ensure the client to receive the last status code before the socket gets // destroyed. int code; - if (android::base::ReadFully(socket_fd.get(), &code, 4)) { + if (android::base::ReadFully(socket_fd, &code, 4)) { ALOGI(" received %d, exiting now", code); } else { ALOGE("failed to read the code: %s", strerror(errno)); diff --git a/unique_fd.h b/unique_fd.h deleted file mode 100644 index cc85383f8..000000000 --- a/unique_fd.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef UNIQUE_FD_H -#define UNIQUE_FD_H - -#include <stdio.h> - -#include <memory> - -class unique_fd { - public: - unique_fd(int fd) : fd_(fd) { } - - unique_fd(unique_fd&& uf) { - fd_ = uf.fd_; - uf.fd_ = -1; - } - - ~unique_fd() { - if (fd_ != -1) { - close(fd_); - } - } - - int get() { - return fd_; - } - - // Movable. - unique_fd& operator=(unique_fd&& uf) { - fd_ = uf.fd_; - uf.fd_ = -1; - return *this; - } - - explicit operator bool() const { - return fd_ != -1; - } - - private: - int fd_; - - // Non-copyable. - unique_fd(const unique_fd&) = delete; - unique_fd& operator=(const unique_fd&) = delete; -}; - -#endif // UNIQUE_FD_H diff --git a/updater/Android.mk b/updater/Android.mk index d7aa613e9..7c3f6160c 100644 --- a/updater/Android.mk +++ b/updater/Android.mk @@ -14,26 +14,51 @@ LOCAL_PATH := $(call my-dir) -updater_src_files := \ - install.cpp \ - blockimg.cpp \ - updater.cpp - -# -# Build a statically-linked binary to include in OTA packages -# +# updater (static executable) +# =============================== +# Build a statically-linked binary to include in OTA packages. include $(CLEAR_VARS) -# Build only in eng, so we don't end up with a copy of this in /system -# on user builds. (TODO: find a better way to build device binaries -# needed only for OTA packages.) -LOCAL_MODULE_TAGS := eng +updater_src_files := \ + install.cpp \ + blockimg.cpp \ + updater.cpp LOCAL_CLANG := true - LOCAL_SRC_FILES := $(updater_src_files) -LOCAL_STATIC_LIBRARIES += libfec libfec_rs libext4_utils_static libsquashfs_utils libcrypto_static +LOCAL_STATIC_LIBRARIES += \ + $(TARGET_RECOVERY_UPDATER_LIBS) \ + $(TARGET_RECOVERY_UPDATER_EXTRA_LIBS) \ + libfec \ + libfec_rs \ + libext4_utils_static \ + libsquashfs_utils \ + libcrypto_utils_static \ + libcrypto_static \ + libapplypatch \ + libbase \ + libotafault \ + libedify \ + libmtdutils \ + libminzip \ + libz \ + libbz \ + libcutils \ + liblog \ + libselinux + +tune2fs_static_libraries := \ + libext2_com_err \ + libext2_blkid \ + libext2_quota \ + libext2_uuid_static \ + libext2_e2p \ + libext2fs + +LOCAL_STATIC_LIBRARIES += \ + libtune2fs \ + $(tune2fs_static_libraries) ifeq ($(TARGET_USERIMAGES_USE_EXT4), true) LOCAL_CFLAGS += -DUSE_EXT4 @@ -44,20 +69,6 @@ LOCAL_STATIC_LIBRARIES += \ libz endif -LOCAL_STATIC_LIBRARIES += $(TARGET_RECOVERY_UPDATER_LIBS) $(TARGET_RECOVERY_UPDATER_EXTRA_LIBS) -LOCAL_STATIC_LIBRARIES += libapplypatch libbase libotafault libedify libmtdutils libminzip libz -LOCAL_STATIC_LIBRARIES += libbz -LOCAL_STATIC_LIBRARIES += libcutils liblog libc -LOCAL_STATIC_LIBRARIES += libselinux -tune2fs_static_libraries := \ - libext2_com_err \ - libext2_blkid \ - libext2_quota \ - libext2_uuid_static \ - libext2_e2p \ - libext2fs -LOCAL_STATIC_LIBRARIES += libtune2fs $(tune2fs_static_libraries) - LOCAL_C_INCLUDES += external/e2fsprogs/misc LOCAL_C_INCLUDES += $(LOCAL_PATH)/.. diff --git a/updater/blockimg.cpp b/updater/blockimg.cpp index f7955566d..7aff7fff7 100644 --- a/updater/blockimg.cpp +++ b/updater/blockimg.cpp @@ -40,6 +40,7 @@ #include <android-base/parseint.h> #include <android-base/strings.h> +#include <android-base/unique_fd.h> #include "applypatch/applypatch.h" #include "edify/expr.h" @@ -49,7 +50,6 @@ #include "minzip/Hash.h" #include "ota_io.h" #include "print_sha1.h" -#include "unique_fd.h" #include "updater.h" #define BLOCKSIZE 4096 @@ -213,7 +213,7 @@ static void allocate(size_t size, std::vector<uint8_t>& buffer) { } struct RangeSinkState { - RangeSinkState(RangeSet& rs) : tgt(rs) { }; + explicit RangeSinkState(RangeSet& rs) : tgt(rs) { }; int fd; const RangeSet& tgt; @@ -398,7 +398,7 @@ struct CommandParameters { std::string stashbase; bool canwrite; int createdstash; - int fd; + android::base::unique_fd fd; bool foundwrites; bool isunresumable; int version; @@ -608,9 +608,7 @@ static int LoadStash(CommandParameters& params, const std::string& base, const s return -1; } - int fd = TEMP_FAILURE_RETRY(open(fn.c_str(), O_RDONLY)); - unique_fd fd_holder(fd); - + android::base::unique_fd fd(TEMP_FAILURE_RETRY(ota_open(fn.c_str(), O_RDONLY))); if (fd == -1) { fprintf(stderr, "open \"%s\" failed: %s\n", fn.c_str(), strerror(errno)); return -1; @@ -665,9 +663,9 @@ static int WriteStash(const std::string& base, const std::string& id, int blocks fprintf(stderr, " writing %d blocks to %s\n", blocks, cn.c_str()); - int fd = TEMP_FAILURE_RETRY(open(fn.c_str(), O_WRONLY | O_CREAT | O_TRUNC, STASH_FILE_MODE)); - unique_fd fd_holder(fd); - + android::base::unique_fd fd(TEMP_FAILURE_RETRY(ota_open(fn.c_str(), + O_WRONLY | O_CREAT | O_TRUNC, + STASH_FILE_MODE))); if (fd == -1) { fprintf(stderr, "failed to create \"%s\": %s\n", fn.c_str(), strerror(errno)); return -1; @@ -690,9 +688,8 @@ static int WriteStash(const std::string& base, const std::string& id, int blocks } std::string dname = GetStashFileName(base, "", ""); - int dfd = TEMP_FAILURE_RETRY(open(dname.c_str(), O_RDONLY | O_DIRECTORY)); - unique_fd dfd_holder(dfd); - + android::base::unique_fd dfd(TEMP_FAILURE_RETRY(ota_open(dname.c_str(), + O_RDONLY | O_DIRECTORY))); if (dfd == -1) { failure_type = kFileOpenFailure; fprintf(stderr, "failed to open \"%s\" failed: %s\n", dname.c_str(), strerror(errno)); @@ -980,8 +977,8 @@ static int LoadSrcTgtVersion3(CommandParameters& params, RangeSet& tgt, size_t& tgthash = params.tokens[params.cpos++]; } - if (LoadSrcTgtVersion2(params, tgt, src_blocks, params.buffer, params.fd, params.stashbase, - &overlap) == -1) { + if (LoadSrcTgtVersion2(params, tgt, src_blocks, params.buffer, params.fd, + params.stashbase, &overlap) == -1) { return -1; } @@ -1376,8 +1373,7 @@ static unsigned int HashString(const char *s) { static Value* PerformBlockImageUpdate(const char* name, State* state, int /* argc */, Expr* argv[], const Command* commands, size_t cmdcount, bool dryrun) { - CommandParameters params; - memset(¶ms, 0, sizeof(params)); + CommandParameters params = {}; params.canwrite = !dryrun; fprintf(stderr, "performing %s\n", dryrun ? "verification" : "update"); @@ -1446,9 +1442,7 @@ static Value* PerformBlockImageUpdate(const char* name, State* state, int /* arg return StringValue(strdup("")); } - params.fd = TEMP_FAILURE_RETRY(open(blockdev_filename->data, O_RDWR)); - unique_fd fd_holder(params.fd); - + params.fd.reset(TEMP_FAILURE_RETRY(ota_open(blockdev_filename->data, O_RDWR))); if (params.fd == -1) { fprintf(stderr, "open \"%s\" failed: %s\n", blockdev_filename->data, strerror(errno)); return StringValue(strdup("")); @@ -1607,7 +1601,7 @@ pbiudone: failure_type = kFsyncFailure; fprintf(stderr, "fsync failed: %s\n", strerror(errno)); } - // params.fd will be automatically closed because of the fd_holder above. + // params.fd will be automatically closed because it's a unique_fd. // Only delete the stash if the update cannot be resumed, or it's // a verification run and we created the stash. @@ -1733,9 +1727,8 @@ Value* RangeSha1Fn(const char* name, State* state, int /* argc */, Expr* argv[]) return StringValue(strdup("")); } - int fd = open(blockdev_filename->data, O_RDWR); - unique_fd fd_holder(fd); - if (fd < 0) { + android::base::unique_fd fd(ota_open(blockdev_filename->data, O_RDWR)); + if (fd == -1) { ErrorAbort(state, kFileOpenFailure, "open \"%s\" failed: %s", blockdev_filename->data, strerror(errno)); return StringValue(strdup("")); @@ -1789,8 +1782,7 @@ Value* CheckFirstBlockFn(const char* name, State* state, int argc, Expr* argv[]) return StringValue(strdup("")); } - int fd = open(arg_filename->data, O_RDONLY); - unique_fd fd_holder(fd); + android::base::unique_fd fd(ota_open(arg_filename->data, O_RDONLY)); if (fd == -1) { ErrorAbort(state, kFileOpenFailure, "open \"%s\" failed: %s", arg_filename->data, strerror(errno)); diff --git a/updater/install.cpp b/updater/install.cpp index 1a647dfa5..a65b32d81 100644 --- a/updater/install.cpp +++ b/updater/install.cpp @@ -27,7 +27,6 @@ #include <unistd.h> #include <fcntl.h> #include <time.h> -#include <selinux/selinux.h> #include <ftw.h> #include <sys/capability.h> #include <sys/xattr.h> @@ -40,6 +39,8 @@ #include <android-base/parseint.h> #include <android-base/strings.h> #include <android-base/stringprintf.h> +#include <selinux/label.h> +#include <selinux/selinux.h> #include "bootloader.h" #include "applypatch/applypatch.h" @@ -561,7 +562,7 @@ Value* PackageExtractFileFn(const char* name, State* state, } { - int fd = TEMP_FAILURE_RETRY(ota_open(dest_path, O_WRONLY | O_CREAT | O_TRUNC | O_SYNC, + int fd = TEMP_FAILURE_RETRY(ota_open(dest_path, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)); if (fd == -1) { printf("%s: can't open %s for write: %s\n", name, dest_path, strerror(errno)); @@ -604,8 +605,8 @@ Value* PackageExtractFileFn(const char* name, State* state, v->size = mzGetZipEntryUncompLen(entry); v->data = reinterpret_cast<char*>(malloc(v->size)); if (v->data == NULL) { - printf("%s: failed to allocate %ld bytes for %s\n", - name, (long)v->size, zip_path); + printf("%s: failed to allocate %zd bytes for %s\n", + name, v->size, zip_path); goto done1; } @@ -998,13 +999,13 @@ Value* FileGetPropFn(const char* name, State* state, int argc, Expr* argv[]) { buffer = reinterpret_cast<char*>(malloc(st.st_size+1)); if (buffer == NULL) { - ErrorAbort(state, kFileGetPropFailure, "%s: failed to alloc %lld bytes", name, - (long long)st.st_size+1); + ErrorAbort(state, kFileGetPropFailure, "%s: failed to alloc %zu bytes", name, + static_cast<size_t>(st.st_size+1)); goto done; } FILE* f; - f = fopen(filename, "rb"); + f = ota_fopen(filename, "rb"); if (f == NULL) { ErrorAbort(state, kFileOpenFailure, "%s: failed to open %s: %s", name, filename, strerror(errno)); @@ -1012,14 +1013,14 @@ Value* FileGetPropFn(const char* name, State* state, int argc, Expr* argv[]) { } if (ota_fread(buffer, 1, st.st_size, f) != static_cast<size_t>(st.st_size)) { - ErrorAbort(state, kFreadFailure, "%s: failed to read %lld bytes from %s", - name, (long long)st.st_size+1, filename); - fclose(f); + ErrorAbort(state, kFreadFailure, "%s: failed to read %zu bytes from %s", + name, static_cast<size_t>(st.st_size), filename); + ota_fclose(f); goto done; } buffer[st.st_size] = '\0'; - fclose(f); + ota_fclose(f); char* line; line = strtok(buffer, "\n"); @@ -1450,10 +1451,10 @@ Value* RebootNowFn(const char* name, State* state, int argc, Expr* argv[]) { // zero out the 'command' field of the bootloader message. memset(buffer, 0, sizeof(((struct bootloader_message*)0)->command)); - FILE* f = fopen(filename, "r+b"); + FILE* f = ota_fopen(filename, "r+b"); fseek(f, offsetof(struct bootloader_message, command), SEEK_SET); ota_fwrite(buffer, sizeof(((struct bootloader_message*)0)->command), 1, f); - fclose(f); + ota_fclose(f); free(filename); strcpy(buffer, "reboot,"); @@ -1492,7 +1493,7 @@ Value* SetStageFn(const char* name, State* state, int argc, Expr* argv[]) { // bootloader message that the main recovery uses to save its // arguments in case of the device restarting midway through // package installation. - FILE* f = fopen(filename, "r+b"); + FILE* f = ota_fopen(filename, "r+b"); fseek(f, offsetof(struct bootloader_message, stage), SEEK_SET); int to_write = strlen(stagestr)+1; int max_size = sizeof(((struct bootloader_message*)0)->stage); @@ -1501,7 +1502,7 @@ Value* SetStageFn(const char* name, State* state, int argc, Expr* argv[]) { stagestr[max_size-1] = 0; } ota_fwrite(stagestr, to_write, 1, f); - fclose(f); + ota_fclose(f); free(stagestr); return StringValue(filename); @@ -1518,10 +1519,10 @@ Value* GetStageFn(const char* name, State* state, int argc, Expr* argv[]) { if (ReadArgs(state, argv, 1, &filename) < 0) return NULL; char buffer[sizeof(((struct bootloader_message*)0)->stage)]; - FILE* f = fopen(filename, "rb"); + FILE* f = ota_fopen(filename, "rb"); fseek(f, offsetof(struct bootloader_message, stage), SEEK_SET); ota_fread(buffer, sizeof(buffer), 1, f); - fclose(f); + ota_fclose(f); buffer[sizeof(buffer)-1] = '\0'; return StringValue(strdup(buffer)); diff --git a/updater/updater.cpp b/updater/updater.cpp index e956dd557..c222cee0d 100644 --- a/updater/updater.cpp +++ b/updater/updater.cpp @@ -27,6 +27,9 @@ #include "minzip/SysUtil.h" #include "config.h" +#include <selinux/label.h> +#include <selinux/selinux.h> + // Generated by the makefile, this function defines the // RegisterDeviceExtensions() function, which calls all the // registration functions for device-specific extensions. diff --git a/updater/updater.h b/updater/updater.h index d1dfdd05e..d3a09b93d 100644 --- a/updater/updater.h +++ b/updater/updater.h @@ -20,9 +20,6 @@ #include <stdio.h> #include "minzip/Zip.h" -#include <selinux/selinux.h> -#include <selinux/label.h> - typedef struct { FILE* cmd_pipe; ZipArchive* package_zip; @@ -32,6 +29,7 @@ typedef struct { size_t package_zip_len; } UpdaterInfo; +struct selabel_handle; extern struct selabel_handle *sehandle; #endif diff --git a/verifier.cpp b/verifier.cpp index 16cc7cf03..996a1fdf9 100644 --- a/verifier.cpp +++ b/verifier.cpp @@ -22,6 +22,7 @@ #include <algorithm> #include <memory> +#include <openssl/bn.h> #include <openssl/ecdsa.h> #include <openssl/obj_mac.h> diff --git a/wear_ui.cpp b/wear_ui.cpp index 2502313ff..5451ed1aa 100644 --- a/wear_ui.cpp +++ b/wear_ui.cpp @@ -277,7 +277,7 @@ void WearRecoveryUI::progress_loop() { // minimum of 20ms delay between frames double delay = interval - (end-start); if (delay < 0.02) delay = 0.02; - usleep((long)(delay * 1000000)); + usleep(static_cast<useconds_t>(delay * 1000000)); } } @@ -500,8 +500,8 @@ void WearRecoveryUI::Redraw() } void WearRecoveryUI::ShowFile(FILE* fp) { - std::vector<long> offsets; - offsets.push_back(ftell(fp)); + std::vector<off_t> offsets; + offsets.push_back(ftello(fp)); ClearText(); struct stat sb; @@ -511,7 +511,7 @@ void WearRecoveryUI::ShowFile(FILE* fp) { while (true) { if (show_prompt) { Print("--(%d%% of %d bytes)--", - static_cast<int>(100 * (double(ftell(fp)) / double(sb.st_size))), + static_cast<int>(100 * (double(ftello(fp)) / double(sb.st_size))), static_cast<int>(sb.st_size)); Redraw(); while (show_prompt) { @@ -530,7 +530,7 @@ void WearRecoveryUI::ShowFile(FILE* fp) { if (feof(fp)) { return; } - offsets.push_back(ftell(fp)); + offsets.push_back(ftello(fp)); } } ClearText(); |