Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
L
libplist
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
pwn
libplist
Commits
4de32932
Commit
4de32932
authored
6 years ago
by
Nikias Bassen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove node_iterator and operate on node list directly to improve memory usage
parent
71dd25e1
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
7 additions
and
269 deletions
+7
-269
Makefile.am
libcnary/Makefile.am
+0
-4
iterator.h
libcnary/include/iterator.h
+0
-49
node_iterator.h
libcnary/include/node_iterator.h
+0
-55
iterator.c
libcnary/iterator.c
+0
-61
node.c
libcnary/node.c
+1
-5
node_iterator.c
libcnary/node_iterator.c
+0
-80
bplist.c
src/bplist.c
+1
-4
plist.c
src/plist.c
+4
-7
xplist.c
src/xplist.c
+1
-4
No files found.
libcnary/Makefile.am
View file @
4de32932
...
...
@@ -8,11 +8,7 @@ libcnary_la_SOURCES = \
node.c
\
list.c
\
node_list.c
\
iterator.c
\
node_iterator.c
\
include/node.h
\
include/list.h
\
include/node_list.h
\
include/iterator.h
\
include/node_iterator.h
\
include/object.h
This diff is collapsed.
Click to expand it.
libcnary/include/iterator.h
deleted
100644 → 0
View file @
71dd25e1
/*
* iterator.h
*
* Created on: Mar 8, 2011
* Author: posixninja
*
* Copyright (c) 2011 Joshua Hill. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef ITERATOR_H_
#define ITERATOR_H_
struct
list_t
;
struct
object_t
;
typedef
struct
iterator_t
{
struct
object_t
*
(
*
next
)(
struct
iterator_t
*
iterator
);
int
(
*
bind
)(
struct
iterator_t
*
iterator
,
struct
list_t
*
list
);
unsigned
int
count
;
unsigned
int
position
;
struct
list_t
*
list
;
struct
object_t
*
end
;
struct
object_t
*
begin
;
struct
object_t
*
value
;
}
iterator_t
;
void
iterator_destroy
(
struct
iterator_t
*
iterator
);
struct
iterator_t
*
iterator_create
(
struct
list_t
*
list
);
struct
object_t
*
iterator_next
(
struct
iterator_t
*
iterator
);
int
iterator_bind
(
struct
iterator_t
*
iterator
,
struct
list_t
*
list
);
#endif
/* ITERATOR_H_ */
This diff is collapsed.
Click to expand it.
libcnary/include/node_iterator.h
deleted
100644 → 0
View file @
71dd25e1
/*
* node_iterator.h
*
* Created on: Mar 8, 2011
* Author: posixninja
*
* Copyright (c) 2011 Joshua Hill. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef NODE_ITERATOR_H_
#define NODE_ITERATOR_H_
#include "iterator.h"
#include "node_list.h"
// This class implements the abstract iterator class
typedef
struct
node_iterator_t
{
// Super class
struct
iterator_t
super
;
// Local members
struct
node_t
*
(
*
next
)(
struct
node_iterator_t
*
iterator
);
int
(
*
bind
)(
struct
node_iterator_t
*
iterator
,
struct
node_list_t
*
list
);
unsigned
int
count
;
unsigned
int
position
;
struct
node_list_t
*
list
;
struct
node_t
*
end
;
struct
node_t
*
begin
;
struct
node_t
*
value
;
}
node_iterator_t
;
void
node_iterator_destroy
(
node_iterator_t
*
iterator
);
node_iterator_t
*
node_iterator_create
(
node_list_t
*
list
);
struct
node_t
*
node_iterator_next
(
struct
node_iterator_t
*
iterator
);
int
node_iterator_bind
(
struct
node_iterator_t
*
iterator
,
struct
node_list_t
*
list
);
#endif
/* NODE_ITERATOR_H_ */
This diff is collapsed.
Click to expand it.
libcnary/iterator.c
deleted
100644 → 0
View file @
71dd25e1
/*
* iterator.c
*
* Created on: Mar 8, 2011
* Author: posixninja
*
* Copyright (c) 2011 Joshua Hill. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "list.h"
#include "object.h"
#include "iterator.h"
void
iterator_destroy
(
iterator_t
*
iterator
)
{
if
(
iterator
)
{
free
(
iterator
);
}
}
iterator_t
*
iterator_create
(
list_t
*
list
)
{
iterator_t
*
iterator
=
(
iterator_t
*
)
malloc
(
sizeof
(
iterator_t
));
if
(
iterator
==
NULL
)
{
return
NULL
;
}
memset
(
iterator
,
'\0'
,
sizeof
(
iterator_t
));
if
(
list
!=
NULL
)
{
// Create and bind to list
}
else
{
// Empty Iterator
}
return
iterator
;
}
object_t
*
iterator_next
(
iterator_t
*
iterator
)
{
return
NULL
;
}
int
iterator_bind
(
iterator_t
*
iterator
,
list_t
*
list
)
{
return
-
1
;
}
This diff is collapsed.
Click to expand it.
libcnary/node.c
View file @
4de32932
...
...
@@ -26,7 +26,6 @@
#include "node.h"
#include "node_list.h"
#include "node_iterator.h"
void
node_destroy
(
node_t
*
node
)
{
if
(
!
node
)
return
;
...
...
@@ -114,7 +113,6 @@ int node_insert(node_t* parent, unsigned int node_index, node_t* child)
static
void
_node_debug
(
node_t
*
node
,
unsigned
int
depth
)
{
unsigned
int
i
=
0
;
node_t
*
current
=
NULL
;
node_iterator_t
*
iter
=
NULL
;
for
(
i
=
0
;
i
<
depth
;
i
++
)
{
printf
(
"
\t
"
);
}
...
...
@@ -128,11 +126,9 @@ static void _node_debug(node_t* node, unsigned int depth) {
if
(
node
->
parent
)
{
printf
(
"NODE
\n
"
);
}
iter
=
node_iterator_create
(
node
->
children
);
while
((
current
=
iter
->
next
(
iter
)))
{
for
(
current
=
node_first_child
(
node
);
current
;
current
=
node_next_sibling
(
current
))
{
_node_debug
(
current
,
depth
+
1
);
}
node_iterator_destroy
(
iter
);
}
}
...
...
This diff is collapsed.
Click to expand it.
libcnary/node_iterator.c
deleted
100644 → 0
View file @
71dd25e1
/*
* node_iterator.c
*
* Created on: Mar 8, 2011
* Author: posixninja
*
* Copyright (c) 2011 Joshua Hill. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "node.h"
#include "node_list.h"
#include "node_iterator.h"
void
node_iterator_destroy
(
node_iterator_t
*
iterator
)
{
if
(
iterator
)
{
free
(
iterator
);
}
}
node_iterator_t
*
node_iterator_create
(
node_list_t
*
list
)
{
node_iterator_t
*
iterator
=
(
node_iterator_t
*
)
malloc
(
sizeof
(
node_iterator_t
));
if
(
iterator
==
NULL
)
{
return
NULL
;
}
memset
(
iterator
,
'\0'
,
sizeof
(
node_iterator_t
));
iterator
->
count
=
0
;
iterator
->
position
=
0
;
iterator
->
end
=
NULL
;
iterator
->
begin
=
NULL
;
iterator
->
value
=
NULL
;
iterator
->
list
=
NULL
;
iterator
->
next
=
node_iterator_next
;
iterator
->
bind
=
node_iterator_bind
;
if
(
list
!=
NULL
)
{
iterator
->
bind
(
iterator
,
list
);
}
return
iterator
;
}
node_t
*
node_iterator_next
(
node_iterator_t
*
iterator
)
{
node_t
*
node
=
iterator
->
value
;
if
(
node
)
{
iterator
->
value
=
node
->
next
;
}
iterator
->
position
++
;
return
node
;
}
int
node_iterator_bind
(
node_iterator_t
*
iterator
,
node_list_t
*
list
)
{
iterator
->
position
=
0
;
iterator
->
end
=
list
->
end
;
iterator
->
count
=
list
->
count
;
iterator
->
begin
=
list
->
begin
;
iterator
->
value
=
list
->
begin
;
return
0
;
}
This diff is collapsed.
Click to expand it.
src/bplist.c
View file @
4de32932
...
...
@@ -39,7 +39,6 @@
#include "ptrarray.h"
#include <node.h>
#include <node_iterator.h>
/* Magic marker and size. */
#define BPLIST_MAGIC ((uint8_t*)"bplist")
...
...
@@ -938,12 +937,10 @@ static void serialize_plist(node_t* node, void* data)
ptr_array_add
(
ser
->
objects
,
node
);
//now recurse on children
node_iterator_t
*
ni
=
node_iterator_create
(
node
->
children
);
node_t
*
ch
;
while
((
ch
=
node_iterator_next
(
ni
)
))
{
for
(
ch
=
node_first_child
(
node
);
ch
;
ch
=
node_next_sibling
(
ch
))
{
serialize_plist
(
ch
,
data
);
}
node_iterator_destroy
(
ni
);
return
;
}
...
...
This diff is collapsed.
Click to expand it.
src/plist.c
View file @
4de32932
...
...
@@ -36,7 +36,6 @@
#endif
#include <node.h>
#include <node_iterator.h>
#include <hashtable.h>
extern
void
plist_xml_init
(
void
);
...
...
@@ -209,12 +208,12 @@ static int plist_free_node(node_t* node)
plist_free_data
(
data
);
node
->
data
=
NULL
;
node_iterator_t
*
ni
=
node_iterator_create
(
node
->
children
);
node_t
*
ch
;
while
((
ch
=
node_iterator_next
(
ni
)))
{
for
(
ch
=
node_first_child
(
node
);
ch
;
)
{
node_t
*
next
=
node_next_sibling
(
ch
);
plist_free_node
(
ch
);
ch
=
next
;
}
node_iterator_destroy
(
ni
);
node_destroy
(
node
);
...
...
@@ -366,12 +365,10 @@ static void plist_copy_node(node_t *node, void *parent_node_ptr)
*
(
plist_t
*
)
parent_node_ptr
=
newnode
;
}
node_iterator_t
*
ni
=
node_iterator_create
(
node
->
children
);
node_t
*
ch
;
while
((
ch
=
node_iterator_next
(
ni
)
))
{
for
(
ch
=
node_first_child
(
node
);
ch
;
ch
=
node_next_sibling
(
ch
))
{
plist_copy_node
(
ch
,
&
newnode
);
}
node_iterator_destroy
(
ni
);
}
PLIST_API
plist_t
plist_copy
(
plist_t
node
)
...
...
This diff is collapsed.
Click to expand it.
src/xplist.c
View file @
4de32932
...
...
@@ -40,7 +40,6 @@
#include <node.h>
#include <node_list.h>
#include <node_iterator.h>
#include "plist.h"
#include "base64.h"
...
...
@@ -356,12 +355,10 @@ static void node_to_xml(node_t* node, bytearray_t **outbuf, uint32_t depth)
if
(
node_data
->
type
==
PLIST_DICT
)
{
assert
((
node
->
children
->
count
%
2
)
==
0
);
}
node_iterator_t
*
ni
=
node_iterator_create
(
node
->
children
);
node_t
*
ch
;
while
((
ch
=
node_iterator_next
(
ni
)
))
{
for
(
ch
=
node_first_child
(
node
);
ch
;
ch
=
node_next_sibling
(
ch
))
{
node_to_xml
(
ch
,
outbuf
,
depth
+
1
);
}
node_iterator_destroy
(
ni
);
}
/* fix indent for structured types */
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment