void acl_scan_dir_rm2(ACL_SCAN_DIR *scan) { const char *myname = "acl_scan_dir_rm2"; const char *name; char path[256]; struct acl_stat sbuf; for (;;) { if ((name = acl_scan_dir_next(scan)) == NULL) { if (scan->current != NULL) snprintf(path, sizeof(path), "%s", ACL_SCAN_DIR_PATH(scan)); else path[0] = 0; /* ±ØÐëÍ˳ö¸Ã¿ÕĿ¼ºó²Å¿ÉÒÔɾ³ý¸ÃĿ¼ */ if (acl_scan_dir_pop(scan) == 0) { /* ɾ³ý×²ã¿ÕĿ¼ */ if (path[0] != 0 && SANE_RMDIR(path) == 0) scan->ndirs++; break; } /* ɾ³ý¿ÕĿ¼ */ if (path[0] != 0 && SANE_RMDIR(path) == 0) scan->ndirs++; continue; } snprintf(path, sizeof(path), "%s/%s", ACL_SCAN_DIR_PATH(scan), name); if (acl_stat(path, &sbuf) < 0) { char tbuf[256]; acl_msg_error("%s(%d), %s: stat file(%s) error(%s)", __FILE__, __LINE__, myname, path, acl_last_strerror(tbuf, sizeof(tbuf))); break; } if (S_ISDIR(sbuf.st_mode)) { scan->file_name[0] = 0; if (scan->recursive && acl_scan_dir_push(scan, name) < 0) break; if (scan->scan_fn && scan->scan_fn(scan, scan->scan_ctx) < 0) break; continue; } else ACL_SAFE_STRNCPY(scan->file_name, name, sizeof(scan->file_name)); if (scan->scan_fn && scan->scan_fn(scan, scan->scan_ctx) < 0) break; scan->nfiles++; scan->nsize += sbuf.st_size; SANE_UNLINK(path); } }
acl_int64 acl_scan_dir_size2(ACL_SCAN_DIR *scan, int *nfile, int *ndir) { const char *myname = "acl_scan_dir_size2"; const char *name; char pathbuf[MAX_PATH]; struct acl_stat sbuf; while (1) { if ((name = acl_scan_dir_next(scan)) == NULL) { if (acl_scan_dir_pop(scan) == NULL) break; continue; } snprintf(pathbuf, sizeof(pathbuf), "%s%c%s", ACL_SCAN_DIR_PATH(scan), PATH_SEP_C, name); if (acl_stat(pathbuf, &sbuf) < 0) { acl_msg_error("%s(%d), %s: stat file(%s) error(%s)", __FILE__, __LINE__, myname, pathbuf, acl_last_serror()); break; } memcpy(&scan->current->sbuf, &sbuf, sizeof(sbuf)); if (S_ISDIR(sbuf.st_mode)) { scan->ndirs++; scan->file_name[0] = 0; if (scan->recursive && acl_scan_dir_push(scan, name) < 0) break; } else { ACL_SAFE_STRNCPY(scan->file_name, name, sizeof(scan->file_name)); scan->nfiles++; scan->nsize += sbuf.st_size; } if (scan->scan_fn && scan->scan_fn(scan, scan->scan_ctx) < 0) break; } if (nfile) *nfile = scan->nfiles; if (ndir) *ndir = scan->ndirs; return scan->nsize; }
acl_int64 acl_scan_dir_rm(const char *pathname, int recursive, int *ndir, int *nfile) { const char *myname = "acl_scan_dir_rmall"; ACL_SCAN_DIR *scan; struct acl_stat sbuf; acl_int64 nsize; char tbuf[256]; if (ndir) *ndir = 0; if (nfile) *nfile = 0; if (acl_stat(pathname, &sbuf) < 0) { acl_msg_error("%s(%d), %s: stat pathname(%s) error(%s)", __FILE__, __LINE__, myname, pathname, acl_last_strerror(tbuf, sizeof(tbuf))); return (-1); } if (S_ISDIR(sbuf.st_mode) == 0) { if (nfile) *nfile = 1; SANE_UNLINK(pathname); return (1); } scan = acl_scan_dir_open(pathname, recursive); if (scan == NULL) { acl_msg_error("%s(%d), %s: open path(%s) error(%s)", __FILE__, __LINE__, myname, pathname, acl_last_strerror(tbuf, sizeof(tbuf))); return (-1); } acl_scan_dir_rm2(scan); if (ndir) *ndir = scan->ndirs; if (nfile) *nfile = scan->nfiles; nsize = scan->nsize; acl_scan_dir_close(scan); return (nsize); }
const char *acl_scan_dir_next_name(ACL_SCAN_DIR *scan, int *is_file) { const char *myname = "acl_scan_dir_next_name"; const char *name; char pathbuf[MAX_PATH]; struct acl_stat sbuf; for (;;) { if ((name = acl_scan_dir_next(scan)) == NULL) { if (acl_scan_dir_pop(scan) == 0) return NULL; continue; } snprintf(pathbuf, sizeof(pathbuf), "%s%c%s", ACL_SCAN_DIR_PATH(scan), PATH_SEP_C, name); if (acl_stat(pathbuf, &sbuf) < 0) { acl_msg_error("%s(%d), %s: stat file(%s) error(%s)", __FILE__, __LINE__, myname, pathbuf, acl_last_serror()); return NULL; } memcpy(&scan->current->sbuf, &sbuf, sizeof(sbuf)); scan->nsize += sbuf.st_size; if (!S_ISDIR(sbuf.st_mode)) { if (is_file) *is_file = 1; return name; } scan->ndirs++; if (scan->recursive && acl_scan_dir_push(scan, name) < 0) return NULL; if (is_file) *is_file = 0; return name; } }
time_t queue_file::get_ctime() const { if (m_fp == NULL) { logger_error("m_fp null"); return ((time_t) -1); } else if (m_filePath.empty()) { logger_error("m_filePath empty"); return ((time_t) -1); } struct acl_stat buf; if (acl_stat(m_filePath.c_str(), &buf) == -1) { logger_error("stat file(%s) error(%s)", m_filePath.c_str(), acl_last_serror()); return ((time_t) -1); } return (buf.st_ctime); }
const char *acl_scan_dir_next_file(ACL_SCAN_DIR *scan) { const char *myname = "acl_scan_dir_next_file"; const char *name; char pathbuf[256]; struct acl_stat sbuf; for (;;) { if ((name = acl_scan_dir_next(scan)) == NULL) { if (acl_scan_dir_pop(scan) == 0) return (NULL); continue; } snprintf(pathbuf, sizeof(pathbuf), "%s/%s", ACL_SCAN_DIR_PATH(scan), name); if (acl_stat(pathbuf, &sbuf) < 0) { char tbuf[256]; acl_msg_error("%s(%d), %s: stat file(%s) error(%s)", __FILE__, __LINE__, myname, pathbuf, acl_last_strerror(tbuf, sizeof(tbuf))); return (NULL); } memcpy(&scan->current->sbuf, &sbuf, sizeof(sbuf)); scan->nsize += sbuf.st_size; if (S_ISDIR(sbuf.st_mode)) { scan->ndirs++; if (scan->recursive && acl_scan_dir_push(scan, name) < 0) return (NULL); } else { scan->nfiles++; return (name); } } }