PROXY  WHOIS  RQUOTE  TEXTS  SOFT  FOREX  BBOARD
 Music  Philosophy  Code  Literature  Russian

= ROOT|Technical|Code_Examples|Java|launcher|parse_manifest.c =

page 5 of 6



    if (nl == NULL) {
	nl = strchr(*lp, (int)'\0');
    } else {
	cp = nl;			/* For merging continuation lines */
	if (*nl == '\r' && *(nl+1) == '\n')
	    *nl++ = '\0';
	*nl++ = '\0';

	/*
	 * Process any "continuation" line(s), by making them part of the
	 * "header" line. Yes, I know that we are "undoing" the NULs we
	 * just placed here, but continuation lines are the fairly rare
	 * case, so we shouldn't unnecessarily complicate the code above.
	 *
	 * Note that an entire continuation line is processed each iteration
	 * through the outer while loop.
	 */
	while (*nl == ' ') {
	    nl++;			/* First character to be moved */
	    while (*nl != '\n' && *nl != '\r' && *nl != '\0')
		*cp++ = *nl++;		/* Shift string */
	    if (*nl == '\0')
		return (-1);		/* Error: newline required */
	    *cp = '\0';
	    if (*nl == '\r' && *(nl+1) == '\n')
		*nl++ = '\0';
	    *nl++ = '\0';
	}
    }

    /*
     * Separate the name from the value;
     */
    cp = strchr(*lp, (int)':');
    if (cp == NULL)
	return (-1);
    *cp++ = '\0';		/* The colon terminates the name */
    if (*cp != ' ')
	return (-1);
    *cp++ = '\0';		/* Eat the required space */
    *name = *lp;
    *value = cp;
    *lp = nl;
    return (1);
}

/*
 * Read the manifest from the specified jar file and fill in the manifest_info
 * structure with the information found within.
 *
 * Error returns are as follows:
 *    0	Success
 *   -1 Unable to open jarfile
 *   -2 Error accessing the manifest from within the jarfile (most likely
 *      a manifest is not present, or this isn't a valid zip/jar file).
 */
int
JLI_ParseManifest(char *jarfile, manifest_info *info)
{
    int     fd;
    zentry  entry;
    char    *lp;
    char    *name;
    char    *value;
    int     rc;
    char    *splashscreen_name = NULL;
   
    if ((fd = open(jarfile, O_RDONLY
#ifdef O_BINARY
	| O_BINARY /* use binary mode on windows */
#endif
	)) == -1)
	return (-1);

    info->manifest_version = NULL;
    info->main_class = NULL;
    info->jre_version = NULL;
    info->jre_restrict_search = 0;
    info->splashscreen_image_file_name = NULL;
    if (rc = find_file(fd, &entry, manifest_name) != 0) {
	close(fd);
	return (-2);
    }
    manifest = inflate_file(fd, &entry, NULL);
    if (manifest == NULL) {
	close(fd);
	return (-2);
    }
    lp = manifest;
    while ((rc = parse_nv_pair(&lp, &name, &value)) > 0) {
	if (strcasecmp(name, "Manifest-Version") == 0)
	    info->manifest_version = value;
	else if (strcasecmp(name, "Main-Class") == 0)
	    info->main_class = value;
	else if (strcasecmp(name, "JRE-Version") == 0)
	    info->jre_version = value;
        else if (strcasecmp(name, "JRE-Restrict-Search") == 0) {
	    if (strcasecmp(value, "true") == 0)
		info->jre_restrict_search = 1;
        } else if (strcasecmp(name, "Splashscreen-Image") == 0) {
=5=

1|2|3|4| < PREV = PAGE 5 = NEXT > |6

UP TO ROOT | UP TO DIR | TO FIRST PAGE

Google
 


E-mail Facebook Google Digg del.icio.us BlinkList Fark Furl Ma.gnolia Netscape NewsVine Reddit Slashdot Spurl StumbleUpon Technorati YahooMyWeb LiveJournal Blogmarks TwitThis Live News2.ru BobrDobr.ru Memori.ru MoeMesto.ru

0.026736 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)