|
version 1.1.2.1, 2010/07/13 15:04:43
|
version 1.1.2.6, 2011/05/09 14:35:56
|
|
Line 5
|
Line 5
|
| * $Author$ |
* $Author$ |
| * $Id$ |
* $Id$ |
| * |
* |
| *************************************************************************/ | ************************************************************************** |
| | The ELWIX and AITNET software is distributed under the following |
| | terms: |
| | |
| | All of the documentation and software included in the ELWIX and AITNET |
| | Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
| | |
| | Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
| | by Michael Pounov <misho@elwix.org>. All rights reserved. |
| | |
| | Redistribution and use in source and binary forms, with or without |
| | modification, are permitted provided that the following conditions |
| | are met: |
| | 1. Redistributions of source code must retain the above copyright |
| | notice, this list of conditions and the following disclaimer. |
| | 2. Redistributions in binary form must reproduce the above copyright |
| | notice, this list of conditions and the following disclaimer in the |
| | documentation and/or other materials provided with the distribution. |
| | 3. All advertising materials mentioning features or use of this software |
| | must display the following acknowledgement: |
| | This product includes software developed by Michael Pounov <misho@elwix.org> |
| | ELWIX - Embedded LightWeight unIX and its contributors. |
| | 4. Neither the name of AITNET nor the names of its contributors |
| | may be used to endorse or promote products derived from this software |
| | without specific prior written permission. |
| | |
| | THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND |
| | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| | SUCH DAMAGE. |
| | */ |
| #include "global.h" |
#include "global.h" |
| |
|
| |
|
|
Line 57 create_diridx(const char *csDir, int lm, int *tags, st
|
Line 94 create_diridx(const char *csDir, int lm, int *tags, st
|
| DIR *dir; |
DIR *dir; |
| struct dirent d, *pd; |
struct dirent d, *pd; |
| int n; |
int n; |
| char szStr[STRSIZ], szType[STRSIZ]; | char szStr[STRSIZ], szType[STRSIZ], *old; |
| struct stat sb; |
struct stat sb; |
| register int i; |
register int i; |
| |
|
|
Line 71 create_diridx(const char *csDir, int lm, int *tags, st
|
Line 108 create_diridx(const char *csDir, int lm, int *tags, st
|
| memset(l, 0, sizeof(struct tagDirName)); |
memset(l, 0, sizeof(struct tagDirName)); |
| } |
} |
| |
|
| |
old = getcwd(NULL, 0); |
| if (chdir(csDir) == -1) { |
if (chdir(csDir) == -1) { |
| SETERR; |
SETERR; |
| |
free(old); |
| free(l); |
free(l); |
| *list = NULL; |
*list = NULL; |
| return -1; |
return -1; |
|
Line 80 create_diridx(const char *csDir, int lm, int *tags, st
|
Line 119 create_diridx(const char *csDir, int lm, int *tags, st
|
| dir = opendir("."); |
dir = opendir("."); |
| if (!dir) { |
if (!dir) { |
| SETERR; |
SETERR; |
| |
chdir(old); |
| |
free(old); |
| free(l); |
free(l); |
| *list = NULL; |
*list = NULL; |
| return -1; |
return -1; |
|
Line 91 create_diridx(const char *csDir, int lm, int *tags, st
|
Line 132 create_diridx(const char *csDir, int lm, int *tags, st
|
| l = realloc(l, sizeof(struct tagDirName) * (n + 2)); |
l = realloc(l, sizeof(struct tagDirName) * (n + 2)); |
| if (!l) { |
if (!l) { |
| SETERR; |
SETERR; |
| |
chdir(old); |
| |
free(old); |
| free(l); |
free(l); |
| *list = NULL; |
*list = NULL; |
| closedir(dir); |
closedir(dir); |
|
Line 105 create_diridx(const char *csDir, int lm, int *tags, st
|
Line 148 create_diridx(const char *csDir, int lm, int *tags, st
|
| if (lm & 1) { |
if (lm & 1) { |
| if (lstat(d.d_name, &sb) != -1) { |
if (lstat(d.d_name, &sb) != -1) { |
| memset(szStr, 0, STRSIZ); |
memset(szStr, 0, STRSIZ); |
| |
#if defined(__OpenBSD__) |
| strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", localtime((time_t*) &sb.st_mtim)); |
strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", localtime((time_t*) &sb.st_mtim)); |
| |
#else |
| |
strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", localtime((time_t*) &sb.st_mtime)); |
| |
#endif |
| switch (d.d_type) { |
switch (d.d_type) { |
| case DT_FIFO: |
case DT_FIFO: |
| strlcpy(szType, "fifo", STRSIZ); |
strlcpy(szType, "fifo", STRSIZ); |
|
Line 128 create_diridx(const char *csDir, int lm, int *tags, st
|
Line 175 create_diridx(const char *csDir, int lm, int *tags, st
|
| case DT_SOCK: |
case DT_SOCK: |
| strlcpy(szType, "socket", STRSIZ); |
strlcpy(szType, "socket", STRSIZ); |
| break; |
break; |
| |
/* OpenBSD does not have this type */ |
| |
#ifdef DT_WHT |
| case DT_WHT: |
case DT_WHT: |
| strlcpy(szType, "wht", STRSIZ); |
strlcpy(szType, "wht", STRSIZ); |
| break; |
break; |
| |
#endif |
| case DT_UNKNOWN: |
case DT_UNKNOWN: |
| default: |
default: |
| strlcpy(szType, "unknown", STRSIZ); |
strlcpy(szType, "unknown", STRSIZ); |
| break; |
break; |
| } |
} |
| snprintf(l[n].extra, STRSIZ, "%s links=%d inode=%u %d:%d perm=0%o size=%llu %s", | snprintf(l[n].extra, STRSIZ, "%s links=%d inode=%lu %d:%d perm=0%o size=%ld %s", |
| szType, sb.st_nlink, sb.st_ino, sb.st_uid, sb.st_gid, |
szType, sb.st_nlink, sb.st_ino, sb.st_uid, sb.st_gid, |
| sb.st_mode & 0x1fff, sb.st_size, szStr); |
sb.st_mode & 0x1fff, sb.st_size, szStr); |
| } |
} |
|
Line 150 create_diridx(const char *csDir, int lm, int *tags, st
|
Line 200 create_diridx(const char *csDir, int lm, int *tags, st
|
| for (i = n - 1; i > -1; i--) |
for (i = n - 1; i > -1; i--) |
| tags[l[i].tag] = i; |
tags[l[i].tag] = i; |
| |
|
| |
chdir(old); |
| |
free(old); |
| |
|
| *list = l; |
*list = l; |
| return n; |
return n; |
| } |
} |
|
Line 250 sync_dircmpList(const char *csDir1, const char *csDir2
|
Line 303 sync_dircmpList(const char *csDir1, const char *csDir2
|
| u_short t; |
u_short t; |
| u_int hash; |
u_int hash; |
| struct stat sb; |
struct stat sb; |
| char szLine[STRSIZ], szStr[STRSIZ], szType[STRSIZ], *str, *pbrk; | char szLine[STRSIZ], szStr[STRSIZ], szType[STRSIZ], *str, *pbrk, *old; |
| |
|
| if (!csDir1 || !list || !(tags = create_tags())) |
if (!csDir1 || !list || !(tags = create_tags())) |
| return -1; |
return -1; |
|
Line 261 sync_dircmpList(const char *csDir1, const char *csDir2
|
Line 314 sync_dircmpList(const char *csDir1, const char *csDir2
|
| return n; |
return n; |
| } |
} |
| |
|
| if (!lstat(csDir2, &sb) && S_ISDIR(sb.st_mode)) { | if (lstat(csDir2, &sb) == -1) { |
| | SETERR; |
| | free(l); |
| | return -1; |
| | } |
| | if (S_ISDIR(sb.st_mode)) { |
| | old = getcwd(NULL, 0); |
| if (chdir(csDir2) == -1) { |
if (chdir(csDir2) == -1) { |
| SETERR; |
SETERR; |
| |
chdir(old); |
| |
free(old); |
| free(l); |
free(l); |
| return -1; |
return -1; |
| } |
} |
| dir = opendir("."); |
dir = opendir("."); |
| if (!dir) { |
if (!dir) { |
| SETERR; |
SETERR; |
| |
chdir(old); |
| |
free(old); |
| free(l); |
free(l); |
| return -1; |
return -1; |
| } |
} |
|
Line 287 sync_dircmpList(const char *csDir1, const char *csDir2
|
Line 350 sync_dircmpList(const char *csDir1, const char *csDir2
|
| l = realloc(l, sizeof(struct tagDirName) * (n + 2)); |
l = realloc(l, sizeof(struct tagDirName) * (n + 2)); |
| if (!l) { |
if (!l) { |
| SETERR; |
SETERR; |
| |
chdir(old); |
| |
free(old); |
| closedir(dir); |
closedir(dir); |
| return -1; |
return -1; |
| } else |
} else |
|
Line 299 sync_dircmpList(const char *csDir1, const char *csDir2
|
Line 364 sync_dircmpList(const char *csDir1, const char *csDir2
|
| if (lm & 1) { |
if (lm & 1) { |
| if (lstat(d.d_name, &sb) != -1) { |
if (lstat(d.d_name, &sb) != -1) { |
| memset(szStr, 0, STRSIZ); |
memset(szStr, 0, STRSIZ); |
| |
#if defined(__OpenBSD__) |
| strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", |
strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", |
| localtime((time_t*) &sb.st_mtim)); |
localtime((time_t*) &sb.st_mtim)); |
| |
#else |
| |
strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", |
| |
localtime((time_t*) &sb.st_mtime)); |
| |
#endif |
| switch (d.d_type) { |
switch (d.d_type) { |
| case DT_FIFO: |
case DT_FIFO: |
| strlcpy(szType, "fifo", STRSIZ); |
strlcpy(szType, "fifo", STRSIZ); |
|
Line 323 sync_dircmpList(const char *csDir1, const char *csDir2
|
Line 393 sync_dircmpList(const char *csDir1, const char *csDir2
|
| case DT_SOCK: |
case DT_SOCK: |
| strlcpy(szType, "socket", STRSIZ); |
strlcpy(szType, "socket", STRSIZ); |
| break; |
break; |
| |
/* OpenBSD does not have this type */ |
| |
#ifdef DT_WHT |
| case DT_WHT: |
case DT_WHT: |
| strlcpy(szType, "wht", STRSIZ); |
strlcpy(szType, "wht", STRSIZ); |
| break; |
break; |
| |
#endif |
| case DT_UNKNOWN: |
case DT_UNKNOWN: |
| default: |
default: |
| strlcpy(szType, "unknown", STRSIZ); |
strlcpy(szType, "unknown", STRSIZ); |
| break; |
break; |
| } |
} |
| snprintf(l[n].extra, STRSIZ, |
snprintf(l[n].extra, STRSIZ, |
| "%s links=%d inode=%u %d:%d perm=0%o size=%llu %s", | "%s links=%d inode=%lu %d:%d perm=0%o size=%ld %s", |
| szType, sb.st_nlink, sb.st_ino, sb.st_uid, sb.st_gid, |
szType, sb.st_nlink, sb.st_ino, sb.st_uid, sb.st_gid, |
| sb.st_mode & 0x1fff, sb.st_size, szStr); |
sb.st_mode & 0x1fff, sb.st_size, szStr); |
| } |
} |
|
Line 342 sync_dircmpList(const char *csDir1, const char *csDir2
|
Line 415 sync_dircmpList(const char *csDir1, const char *csDir2
|
| } |
} |
| } |
} |
| closedir(dir); |
closedir(dir); |
| |
chdir(old); |
| |
free(old); |
| } else { |
} else { |
| if (strcmp(csDir2, "-")) { |
if (strcmp(csDir2, "-")) { |
| f = fopen(csDir2, "r"); |
f = fopen(csDir2, "r"); |