Split code to generate "rwx-----" strings into lib/permstring.c so it
authorMartin Pool <mbp@samba.org>
Tue, 27 Nov 2001 06:43:17 +0000 (06:43 +0000)
committerMartin Pool <mbp@samba.org>
Tue, 27 Nov 2001 06:43:17 +0000 (06:43 +0000)
can be reused in tls.

flist.c
lib/permstring.c [new file with mode: 0644]
lib/permstring.h [new file with mode: 0644]
rsync.h

diff --git a/flist.c b/flist.c
index 5bc0288..d9b0da7 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -1,6 +1,7 @@
 /* 
    Copyright (C) Andrew Tridgell 1996
    Copyright (C) Paul Mackerras 1996
 /* 
    Copyright (C) Andrew Tridgell 1996
    Copyright (C) Paul Mackerras 1996
+   Copyright (C) 2001 by Martin Pool <mbp@samba.org>
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -111,24 +112,14 @@ static char *string_area_strdup(struct string_area **ap, const char *src)
 
 static void list_file_entry(struct file_struct *f)
 {
 
 static void list_file_entry(struct file_struct *f)
 {
-       char perms[11] = "----------";
-       char *perm_map = "rwxrwxrwx";
-       int i;
+       char perms[11];
 
        if (!f->basename)
                /* this can happen if duplicate names were removed */
                return;
 
 
        if (!f->basename)
                /* this can happen if duplicate names were removed */
                return;
 
-       for (i=0;i<9;i++) {
-               if (f->mode & (1<<i)) perms[9-i] = perm_map[8-i];
-       }
-       if (S_ISLNK(f->mode)) perms[0] = 'l';
-       if (S_ISDIR(f->mode)) perms[0] = 'd';
-       if (S_ISBLK(f->mode)) perms[0] = 'b';
-       if (S_ISCHR(f->mode)) perms[0] = 'c';
-       if (S_ISSOCK(f->mode)) perms[0] = 's';
-       if (S_ISFIFO(f->mode)) perms[0] = 'p';
-       
+       permstring(perms, f->mode);
+
        if (preserve_links && S_ISLNK(f->mode)) {
                rprintf(FINFO,"%s %11.0f %s %s -> %s\n", 
                        perms, 
        if (preserve_links && S_ISLNK(f->mode)) {
                rprintf(FINFO,"%s %11.0f %s %s -> %s\n", 
                        perms, 
diff --git a/lib/permstring.c b/lib/permstring.c
new file mode 100644 (file)
index 0000000..4275dfe
--- /dev/null
@@ -0,0 +1,48 @@
+/* 
+   Copyright (C) Andrew Tridgell 1996
+   Copyright (C) Paul Mackerras 1996
+   Copyright (C) 2001 by Martin Pool <mbp@samba.org>
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program 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 General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include <sys/stat.h>
+
+/**
+ * Produce a string representation of Unix mode bits like that used by
+ * ls(1).
+ *
+ * @param buf buffer of at least 11 characters
+ **/
+void permstring(char *perms,
+               int mode)
+{
+       static const char *perm_map = "rwxrwxrwx";
+       int i;
+
+       strcpy(perms, "----------");
+       
+       for (i=0;i<9;i++) {
+               if (mode & (1<<i)) perms[9-i] = perm_map[8-i];
+       }
+       if (S_ISLNK(mode)) perms[0] = 'l';
+       if (S_ISDIR(mode)) perms[0] = 'd';
+       if (S_ISBLK(mode)) perms[0] = 'b';
+       if (S_ISCHR(mode)) perms[0] = 'c';
+       if (S_ISSOCK(mode)) perms[0] = 's';
+       if (S_ISFIFO(mode)) perms[0] = 'p';
+}
+
+       
diff --git a/lib/permstring.h b/lib/permstring.h
new file mode 100644 (file)
index 0000000..d74787d
--- /dev/null
@@ -0,0 +1,3 @@
+#define PERMSTRING_SIZE 11
+
+void permstring(char *perms, int mode);
diff --git a/rsync.h b/rsync.h
index e02ebf3..0346c6c 100644 (file)
--- a/rsync.h
+++ b/rsync.h
@@ -389,7 +389,7 @@ static inline int flist_up(struct file_list *flist, int i)
 #include "byteorder.h"
 #include "proto.h"
 #include "lib/mdfour.h"
 #include "byteorder.h"
 #include "proto.h"
 #include "lib/mdfour.h"
-
+#include "lib/permstring.h"
 
 /* We have replacement versions of these if they're missing. */
 #ifndef HAVE_ASPRINTF
 
 /* We have replacement versions of these if they're missing. */
 #ifndef HAVE_ASPRINTF