diff options
author | Wayne Davison <wayned@samba.org> | 2006-01-30 17:53:13 +0000 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2006-01-30 17:53:13 +0000 |
commit | 81b096feef3773dfd17e384ffb9328287cdcea94 (patch) | |
tree | 7af4b1e13ad9e2fa01f8fb04c8442792313ef565 /chmod.c | |
parent | 7627e92c549a662ddc922dd7f08e8970da7bbd15 (diff) | |
download | android_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.c | 18 |
1 files changed, 9 insertions, 9 deletions
@@ -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; } |