static void cleanUploadedFiles(HttpConn *conn) { HttpRx *rx; HttpUploadFile *file; cchar *path, *uploadDir; int index; rx = conn->rx; uploadDir = getUploadDir(rx->route); for (ITERATE_ITEMS(rx->files, file, index)) { if (file->filename) { if (rx->autoDelete) { mprDeletePath(file->filename); } else if (rx->renameUploads) { path = mprJoinPath(uploadDir, file->clientFilename); if (rename(file->filename, path) != 0) { mprLog("http error", 0, "Cannot rename %s to %s", file->filename, path); } } file->filename = 0; } } }
static void testCopyPath(MprTestGroup *gp) { MprFile *file; char *from, *to; from = sfmt("copyTest-%s.tmp", mprGetCurrentThreadName(gp)); assert(from != 0); file = mprOpenFile(from, O_CREAT | O_TRUNC | O_WRONLY, 0664); assert(file != 0); mprWriteFileString(file, "Hello World"); mprCloseFile(file); to = sfmt("newTest-%s.tmp", mprGetCurrentThreadName(gp)); assert(mprPathExists(from, F_OK)); mprCopyPath(from, to, 0664); assert(mprPathExists(to, F_OK)); mprDeletePath(from); mprDeletePath(to); }
static void testTemp(MprTestGroup *gp) { char *path; path = mprGetTempPath(NULL); assert(path && *path); assert(mprIsPathAbs(path)); assert(mprPathExists(path, F_OK)); mprDeletePath(path); }
static void testMakeDir(MprTestGroup *gp) { TestPath *ts; int rc; ts = (TestPath*) gp->data; mprGlobalLock(gp); rc = mprMakeDir(ts->dir1, DIRMODE, -1, -1, 1); assert(rc == 0); assert(access(ts->dir1, X_OK) == 0); rmdir(ts->dir1); assert(access(ts->dir1, X_OK) < 0); rmdir(ts->dir2); rmdir(ts->dir1); /* Dir should not exist before test */ assert(access(ts->dir1, X_OK) < 0); /* Make directory path */ rc = mprMakeDir(ts->dir2, DIRMODE, -1, -1, 1); assert(rc == 0); assert(access(ts->dir2, X_OK) == 0); rc = mprDeletePath(ts->dir2); assert(rc == 0); rc = mprDeletePath(ts->dir1); assert(rc == 0); assert(access(ts->dir1, X_OK) < 0); assert(access(ts->dir2, X_OK) < 0); mprGlobalUnlock(gp); }
static void handleDeleteRequest(HttpQueue *q) { HttpConn *conn; HttpTx *tx; conn = q->conn; tx = conn->tx; assure(tx->filename); assure(tx->fileInfo.checked); if (!tx->fileInfo.isReg) { httpError(conn, HTTP_CODE_NOT_FOUND, "URI not found"); return; } if (mprDeletePath(tx->filename) < 0) { httpError(conn, HTTP_CODE_NOT_FOUND, "Can't remove URI"); return; } httpSetStatus(conn, HTTP_CODE_NO_CONTENT); }
int APIENTRY WinMain(HINSTANCE inst, HINSTANCE junk, char *command, int junk2) { char **argv; cchar *documents, *home, *logs, *port, *ssl, *argp, *path, *contents, *revised; cchar *user, *group, *cache, *modules, *bak; int argc, err, nextArg; static void logHandler(int flags, int level, cchar *msg); if (mprCreate(0, NULL, MPR_USER_EVENTS_THREAD) == NULL) { exit(1); } if ((argc = mprMakeArgv(command, &argv, MPR_ARGV_ARGS_ONLY)) < 0) { return FALSE; } mprSetLogHandler(logHandler); #else int main(int argc, char **argv) { cchar *documents, *home, *logs, *port, *ssl, *argp, *path, *contents, *revised; cchar *user, *group, *cache, *modules, *bak; int err, nextArg; if (mprCreate(argc, argv, MPR_USER_EVENTS_THREAD) == NULL) { exit(1); } #endif documents = home = port = ssl = logs = user = group = cache = modules = 0; for (err = 0, nextArg = 1; nextArg < argc; nextArg++) { argp = argv[nextArg]; if (*argp != '-') { break; } if (smatch(argp, "--documents") && nextArg < argc) { documents = argv[++nextArg]; } else if (smatch(argp, "--home") && nextArg < argc) { home = argv[++nextArg]; } else if (smatch(argp, "--logs") && nextArg < argc) { logs = argv[++nextArg]; } else if (smatch(argp, "--port") && nextArg < argc) { port = argv[++nextArg]; } else if (smatch(argp, "--ssl") && nextArg < argc) { ssl = argv[++nextArg]; } else if (smatch(argp, "--user") && nextArg < argc) { user = argv[++nextArg]; } else if (smatch(argp, "--group") && nextArg < argc) { group = argv[++nextArg]; } else if (smatch(argp, "--cache") && nextArg < argc) { cache = argv[++nextArg]; } else if (smatch(argp, "--modules") && nextArg < argc) { modules = argv[++nextArg]; } else { err++; } } if (nextArg != (argc - 1)) { err++; } if (err) { #if BIT_WIN_LIKE mprUserError("Bad command line:"); #else mprUserError("Bad command line:\n" " Usage: pathConfig [options]\n" " Switches:\n" " --cache dir # Cache dir" " --documents dir # Static documents directory" " --group groupname # Group name" " --home dir # Server home directory" " --logs dir # Log directory" " --modules dir # moduels dir" " --port number # HTTP port number" " --user username # User name"); #endif return 1; } path = argv[nextArg++]; if ((contents = mprReadPathContents(path, NULL)) == 0) { mprUserError("Cannot read %s", path); return 1; } if (port) { contents = replace(contents, "Listen 80", "Listen %s", port); } if (ssl) { contents = replace(contents, "443", ssl); } if (documents) { contents = replace(contents, "DocumentRoot", "DocumentRoot \"%s\"", documents); } if (home) { contents = replace(contents, "ServerRoot", "ServerRoot \"%s\"", home); } if (logs) { contents = replace(contents, "ErrorLog", "ErrorLog \"%s\"", mprJoinPath(logs, "error.log")); contents = replace(contents, "AccessLog", "AccessLog \"%s\"", mprJoinPath(logs, "access.log")); } if (user) { contents = replace(contents, "UserAccount", "UserAccount %s", user); } if (group) { contents = replace(contents, "GroupAccount", "GroupAccount %s", group); } if (cache) { contents = replace(contents, "EspDir cache", "EspDir cache \"%s\"", cache); } if (modules) { contents = replace(contents, "LoadModulePath", "LoadModulePath \"%s\"", modules); } revised = mprGetTempPath(mprGetPathDir(path)); if (mprWritePathContents(revised, contents, -1, 0644) < 0) { mprUserError("Cannot write %s", revised); } bak = sfmt("%s.bak", path); mprDeletePath(bak); if (rename(path, bak) < 0) { mprUserError("Cannot save %s to %s: 0x%x", path, bak, mprGetError()); } mprDeletePath(path); if (rename(revised, path) < 0) { mprUserError("Cannot rename %s to %s: 0x%x", revised, path, mprGetError()); rename(bak, path); } return 0; }
static int mdbDelete(cchar *path) { return mprDeletePath(path); }
/* Compile a view or controller cacheName MD5 cache name (not a full path) source ESP source file name module Module file name */ bool espCompile(HttpConn *conn, cchar *source, cchar *module, cchar *cacheName, int isView) { MprFile *fp; HttpRx *rx; HttpRoute *route; EspRoute *eroute; cchar *csource; char *layout, *script, *page, *err; ssize len; rx = conn->rx; route = rx->route; eroute = route->eroute; layout = 0; if (isView) { if ((page = mprReadPathContents(source, &len)) == 0) { httpError(conn, HTTP_CODE_INTERNAL_SERVER_ERROR, "Can't read %s", source); return 0; } /* Use layouts iff there is a source defined on the route. Only MVC/controllers based apps do this. */ if (eroute->layoutsDir) { #if UNUSED layout = mprSamePath(eroute->layoutsDir, route->dir) ? 0 : mprJoinPath(eroute->layoutsDir, "default.esp"); #else layout = mprJoinPath(eroute->layoutsDir, "default.esp"); #endif } if ((script = espBuildScript(route, page, source, cacheName, layout, &err)) == 0) { httpError(conn, HTTP_CODE_INTERNAL_SERVER_ERROR, "Can't build %s, error %s", source, err); return 0; } csource = mprJoinPathExt(mprTrimPathExt(module), ".c"); if ((fp = mprOpenFile(csource, O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, 0664)) == 0) { httpError(conn, HTTP_CODE_INTERNAL_SERVER_ERROR, "Can't open compiled script file %s", csource); return 0; } len = slen(script); if (mprWriteFile(fp, script, len) != len) { httpError(conn, HTTP_CODE_INTERNAL_SERVER_ERROR, "Can't write compiled script file %s", csource); mprCloseFile(fp); return 0; } mprCloseFile(fp); } else { csource = source; } mprMakeDir(eroute->cacheDir, 0775, -1, -1, 1); /* WARNING: GC yield here */ if (runCommand(conn, eroute->compile, csource, module) < 0) { return 0; } if (eroute->link) { /* WARNING: GC yield here */ if (runCommand(conn, eroute->link, csource, module) < 0) { return 0; } #if !(BLD_DEBUG && MACOSX) /* MAC needs the object for debug information */ mprDeletePath(mprJoinPathExt(mprTrimPathExt(module), BLD_OBJ)); #endif } #if BLD_WIN_LIKE { /* Windows leaves intermediate object in the current directory */ cchar *obj; obj = mprReplacePathExt(mprGetPathBase(csource), BLD_OBJ); if (mprPathExists(obj, F_OK)) { mprDeletePath(obj); } } #endif if (!eroute->keepSource && isView) { mprDeletePath(csource); } return 1; }