summaryrefslogtreecommitdiff
path: root/v3/LoadXml.cpp (plain)
blob: 3d7ed01473c94c5057dc9947023dc82adeb3915b
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <fcntl.h>
5#include <unistd.h>
6#include <cutils/properties.h>
7#include <gui/Surface.h>
8#include <utils/Log.h>
9#include <expat.h>
10#include "LoadXml.h"
11namespace android {
12
13char* LoadXml::getApkPackageName(int callingPid) {
14 cameraCallProcess[0] = 0x00;
15 sprintf(cameraCallProcess,"/proc/%d/cmdline",callingPid);
16 int id = open(cameraCallProcess, O_RDONLY);
17 if (id < 0) {
18 memset(cameraCallProcess,0x00,sizeof(cameraCallProcess));
19 } else {
20 memset(cameraCallProcess,0x00,sizeof(cameraCallProcess));
21 read(id, cameraCallProcess, 64);
22 close(id);
23 id = -1;
24 }
25 return cameraCallProcess;
26}
27
28int LoadXml::destroyList_Open(List_Open *head) {
29 List_Open *p;
30 if (head == NULL) {
31 return 0;
32 }
33 while (head) {
34 p = head->next;
35 delete head;
36 head = NULL;
37 head = p;
38 }
39 return 1;
40}
41
42int LoadXml::destroyList_Or(List_Or *head) {
43 List_Or *p;
44 if (head == NULL) {
45 return 0;
46 }
47 while (head) {
48 p = head->next;
49 delete head;
50 head = NULL;
51 head = p;
52 }
53 return 1;
54}
55
56List_Or::~List_Or() {
57 delete apk_name;
58 apk_name = NULL;
59 delete pro;
60 pro = NULL;
61 delete capo;
62 capo = NULL;
63}
64
65List_Open::~List_Open() {
66 delete apk_name;
67 apk_name = NULL;
68 delete camera_number;
69 camera_number = NULL;
70}
71
72LoadXml::~LoadXml() {
73 destroyList_Open(Lo_Head);
74 destroyList_Or(Lr_Head);
75}
76
77List_Open::List_Open(char const* apk,char const*camera) {
78 apk_name = new char[strlen(apk) + 1];
79 strcpy(apk_name, apk);
80 camera_number = new char[strlen(camera) + 1];
81 strcpy(camera_number, camera);
82}
83
84List_Or::List_Or(char const* apk,char const* pr,char const* cap) {
85 apk_name=new char[strlen(apk) + 1];
86 strcpy(apk_name, apk);
87 pro=new char[strlen(pr) + 1];
88 strcpy(pro, pr);
89 capo=new char[strlen(cap) + 1];
90 strcpy(capo, cap);
91}
92
93List_Or::List_Or() {
94 apk_name = NULL;
95 pro = NULL;
96 capo = NULL;
97}
98
99LoadXml::LoadXml() {
100 Lo_Head = NULL;
101 Lr_Head = NULL;
102 indent = 0;
103}
104
105bool LoadXml::findApkOp(char * apk_name) {
106 List_Open* Lo_temp = Lo_Head;
107 while (Lo_temp != NULL) {
108 if (!strcmp(Lo_temp->apk_name,apk_name)) {
109 return true;
110 }
111 Lo_temp = Lo_temp->next;
112 }
113 return false;
114}
115
116int LoadXml::findApkCp(char * apk_name,List_Or* temp) {
117 List_Or* Lr_temp = Lr_Head;
118 while (Lr_temp != NULL) {
119 if (!strcmp(Lr_temp->apk_name, apk_name)) {
120 temp->apk_name = new char[strlen(Lr_temp->apk_name) + 1];
121 strcpy(temp->apk_name, Lr_temp->apk_name);
122 temp->pro = new char[strlen(Lr_temp->pro) + 1];
123 strcpy(temp->pro, Lr_temp->pro);
124 temp->capo = new char[strlen(Lr_temp->capo) + 1];
125 strcpy(temp->capo, Lr_temp->capo);
126 return 1;
127 }
128 Lr_temp = Lr_temp->next;
129 }
130 return 0;
131}
132
133void LoadXml::print() {
134 List_Open* Lo_temp = Lo_Head;
135 List_Or* Lr_temp = Lr_Head;
136 while (Lo_temp != NULL) {
137 Lo_temp = Lo_temp->next;
138 }
139 while (Lr_temp != NULL) {
140 Lr_temp = Lr_temp->next;
141 }
142}
143
144// static
145void LoadXml::StartElementHandlerWrapper (void *data ,const char *name, const char **attrs) {
146 static_cast<LoadXml *>(data)->startElementHandler(name, attrs);
147}
148
149// static
150void LoadXml::EndElementHandlerWrapper(void *me, const char *name) {
151 static_cast<LoadXml *>(me)->endElementHandler(name);
152}
153
154void LoadXml::startElementHandler(const char *name, const char **attrs) {
155 int i;
156 int j;
157 List_Open* q = NULL;
158 List_Or* l = NULL;
159 if (attrs[4] == NULL) {
160 for (i = 0; attrs[i]; i += 4) {
161 q = new List_Open(attrs[i + 1], attrs[i + 3]);
162 q->next = Lo_Head;
163 Lo_Head = q;
164 }
165 }else{
166 for (j = 0; attrs[j]; j += 6) {
167 l = new List_Or(attrs[j + 1], attrs[j + 3], attrs[j + 5]);
168 l->next = Lr_Head;
169 Lr_Head = l;
170 }
171 }
172 ++indent;
173}
174
175void LoadXml::endElementHandler(const char *name) {
176 --indent;
177}
178
179void LoadXml::parseXMLFile() {
180 FILE* fp;
181 const int BUFF_SIZE = 1024;
182 const char* filename = "/etc/Third_party_apk_camera.xml";
183 if ((fp = fopen(filename, "r")) == NULL) {
184 return ;
185 }
186 if (NULL == fp) {
187 return;
188 }
189 XML_Parser parser = ::XML_ParserCreate(NULL);
190 ::XML_SetUserData(parser, this);
191 ::XML_SetElementHandler(parser, StartElementHandlerWrapper, EndElementHandlerWrapper);
192 void *buff = ::XML_GetBuffer(parser, BUFF_SIZE);
193 if (buff == NULL) {
194 //LOG1("failed to in call to XML_GetBuffer()");
195 }
196 int bytes_read = ::fread(buff, 1, BUFF_SIZE, fp);
197 if (bytes_read < 0) {
198 //LOG1("failed in call to read");
199 }
200 if (::XML_ParseBuffer(parser, bytes_read, bytes_read == 0)!= XML_STATUS_OK) {
201 //LOG1("failed parser xml");
202 }
203 ::XML_ParserFree(parser);
204 fclose(fp);
205 fp=NULL;
206}
207}
208
209