aboutsummaryrefslogtreecommitdiffstats
path: root/chmod.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2006-01-30 17:53:13 +0000
committerWayne Davison <wayned@samba.org>2006-01-30 17:53:13 +0000
commit81b096feef3773dfd17e384ffb9328287cdcea94 (patch)
tree7af4b1e13ad9e2fa01f8fb04c8442792313ef565 /chmod.c
parent7627e92c549a662ddc922dd7f08e8970da7bbd15 (diff)
downloadandroid_external_rsync-81b096feef3773dfd17e384ffb9328287cdcea94.tar.gz
android_external_rsync-81b096feef3773dfd17e384ffb9328287cdcea94.tar.bz2
android_external_rsync-81b096feef3773dfd17e384ffb9328287cdcea94.zip
Changed the way the parse_chmod() function is called.
Diffstat (limited to 'chmod.c')
-rw-r--r--chmod.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/chmod.c b/chmod.c
index 3f9c8b43..8a6adfd8 100644
--- a/chmod.c
+++ b/chmod.c
@@ -23,8 +23,7 @@ struct chmod_mode_struct {
/* Parse a chmod-style argument, and break it down into one or more AND/OR
* pairs in a linked list. We use a state machine to walk through the
* options. */
-struct chmod_mode_struct *parse_chmod(const char *modestr,
- struct chmod_mode_struct *append_to)
+int parse_chmod(const char *modestr, struct chmod_mode_struct **root_mode_ptr)
{
int state = STATE_1ST_HALF;
int where = 0, what = 0, op = 0, topbits = 0, topoct = 0, flags = 0;
@@ -154,17 +153,18 @@ struct chmod_mode_struct *parse_chmod(const char *modestr,
if (state == STATE_ERROR) {
free_chmod_mode(first_mode);
- return NULL;
+ return 0;
}
- if (append_to) {
- for (prev_mode = append_to; prev_mode->next; )
- prev_mode = prev_mode->next;
- prev_mode->next = first_mode;
- return append_to;
+ if (!(curr_mode = *root_mode_ptr))
+ *root_mode_ptr = first_mode;
+ else {
+ while (curr_mode->next)
+ curr_mode = curr_mode->next;
+ curr_mode->next = first_mode;
}
- return first_mode;
+ return 1;
}