/**************************************************************** * * J z i p O p e n * * Opens a new ZIP file and creates a new ZIPfile structure to * control the process of installing files into a zip. */ ZIPfile * JzipOpen(char *filename, char *comment) { ZIPfile *zipfile; PRExplodedTime prtime; zipfile = PORT_ZAlloc(sizeof(ZIPfile)); if (!zipfile) out_of_memory(); /* Construct time and date */ PR_ExplodeTime(PR_Now(), PR_LocalTimeParameters, &prtime); zipfile->date = ((prtime.tm_year - 1980) << 9) | ((prtime.tm_month + 1) << 5) | prtime.tm_mday; zipfile->time = (prtime.tm_hour << 11) | (prtime.tm_min << 5) | (prtime.tm_sec & 0x3f); zipfile->fp = NULL; if (filename && (zipfile->fp = PR_Open(filename, PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE, 0777)) == NULL) { char *nsprErr; if (PR_GetErrorTextLength()) { nsprErr = PR_Malloc(PR_GetErrorTextLength() + 1); PR_GetErrorText(nsprErr); } else { nsprErr = NULL; } PR_fprintf(errorFD, "%s: can't open output jar, %s.%s\n", PROGRAM_NAME, filename, nsprErr ? nsprErr : ""); if (nsprErr) PR_Free(nsprErr); errorCount++; exit(ERRX); } zipfile->list = NULL; if (filename) { zipfile->filename = PORT_ZAlloc(strlen(filename) + 1); if (!zipfile->filename) out_of_memory(); PORT_Strcpy(zipfile->filename, filename); } if (comment) { zipfile->comment = PORT_ZAlloc(strlen(comment) + 1); if (!zipfile->comment) out_of_memory(); PORT_Strcpy(zipfile->comment, comment); } return zipfile; }
char * sftk_argGetParamValue(char *paramName,char *parameters) { char searchValue[256]; int paramLen = strlen(paramName); char *returnValue = NULL; int next; if ((parameters == NULL) || (*parameters == 0)) return NULL; PORT_Assert(paramLen+2 < sizeof(searchValue)); PORT_Strcpy(searchValue,paramName); PORT_Strcat(searchValue,"="); while (*parameters) { if (PORT_Strncasecmp(parameters,searchValue,paramLen+1) == 0) { parameters += paramLen+1; returnValue = sftk_argFetchValue(parameters,&next); break; } else { parameters = sftk_argSkipParameter(parameters); } parameters = sftk_argStrip(parameters); } return returnValue; }
static char * getUserDB(void) { char *userdir = getenv("HOME"); char *nssdir = NULL; if (userdir == NULL) { return NULL; } nssdir = PORT_Alloc(strlen(userdir) +sizeof(NSS_USER_PATH1)+sizeof(NSS_USER_PATH2)); if (nssdir == NULL) { return NULL; } PORT_Strcpy(nssdir, userdir); /* verify it exists */ if (!testdir(nssdir)) { PORT_Free(nssdir); return NULL; } PORT_Strcat(nssdir, NSS_USER_PATH1); if (!testdir(nssdir) && mkdir(nssdir, 0760)) { PORT_Free(nssdir); return NULL; } PORT_Strcat(nssdir, NSS_USER_PATH2); if (!testdir(nssdir) && mkdir(nssdir, 0760)) { PORT_Free(nssdir); return NULL; } return nssdir; }
static char * sftkdb_resolvePath(const char *orig) { int count = 0; int len =0; int ret = -1; char *resolved = NULL; char *source = NULL; len = 1025; /* MAX PATH +1*/ if (strlen(orig)+1 > len) { /* PATH TOO LONG */ return NULL; } resolved = PORT_Alloc(len); if (!resolved) { return NULL; } source = PORT_Alloc(len); if (!source) { goto loser; } PORT_Strcpy(source, orig); /* Walk down all the links */ while ( count++ < LG_MAX_LINKS) { char *tmp; /* swap our previous sorce out with resolved */ /* read it */ ret = readlink(source, resolved, len-1); if (ret < 0) { break; } resolved[ret] = 0; tmp = source; source = resolved; resolved = tmp; } if (count > 1) { ret = 0; } loser: if (resolved) { PORT_Free(resolved); } if (ret < 0) { if (source) { PORT_Free(source); source = NULL; } } return source; }