Subversion Repositories SvarDOS

Compare Revisions

Ignore whitespace Rev 248 → Rev 249

/pkginst/lsm.c
1,41 → 1,20
/*
* This file is part of FDNPKG
* Copyright (C) 2013-2016 Mateusz Viste, All rights reserved.
* This file is part of pkginst
* Copyright (C) 2013-2021 Mateusz Viste, All rights reserved.
*/
 
#include <stdio.h> /* fopen, fclose... */
#include <string.h> /* strcasecmp() */
 
#include "helpers.h"
 
#include "lsm.h" /* include self for control */
#include "rtrim.h"
#include "version.h"
 
/* reads a line from a file descriptor, and writes it to *line, the *line array is filled no more than maxlen bytes. returns the number of byte read on success, or a negative value on failure (reaching EOF is considered an error condition) */
static int readline_fromfile(FILE *fd, char *line, int maxlen) {
int bytebuff, linelen = 0;
for (;;) {
bytebuff = fgetc(fd);
if (bytebuff == EOF) {
line[linelen] = 0;
if (linelen == 0) return(-1);
return(linelen);
}
if (bytebuff < 0) return(-1);
if (bytebuff == '\r') continue; /* ignore CR */
if (bytebuff == '\n') {
line[linelen] = 0;
return(linelen);
}
if (linelen < maxlen) line[linelen++] = bytebuff;
}
}
 
 
/* Loads metadata from an LSM file. Returns 0 on success, non-zero on error. */
int readlsm(const char *filename, char *version, int version_maxlen) {
int readlsm(const char *filename, char *version, size_t version_maxlen) {
char linebuff[128];
char *valuestr;
int x;
FILE *fd;
/* reset fields to be read to empty values */
version[0] = 0;
43,20 → 22,9
fd = fopen(filename, "rb");
if (fd == NULL) return(-1);
/* read the LSM file line by line */
while (readline_fromfile(fd, linebuff, sizeof(linebuff) - 1) >= 0) {
for (x = 0;; x++) {
if (linebuff[x] == 0) {
x = -1;
break;
} else if (linebuff[x] == ':') {
break;
}
}
if (x > 0) {
linebuff[x] = 0;
valuestr = linebuff + x + 1;
trim(linebuff);
trim(valuestr);
 
while (freadtokval(fd, linebuff, sizeof(linebuff), &valuestr, ':') == 0) {
if (valuestr != NULL) {
if (strcasecmp(linebuff, "version") == 0) snprintf(version, version_maxlen, "%s", valuestr);
}
}
/pkginst/lsm.h
1,10 → 1,10
/*
* This file is part of FDNPKG
* Copyright (C) 2013-2016 Mateusz Viste, All rights reserved.
* This file is part of pkginst
* Copyright (C) 2013-2021 Mateusz Viste, All rights reserved.
*/
 
#ifndef readlsm_h_sentinel
#define readlsm_h_sentinel
/* Loads metadata from an LSM file. Returns 0 on success, non-zero on error. */
int readlsm(const char *filename, char *version, int version_maxlen);
int readlsm(const char *filename, char *version, size_t version_maxlen);
#endif