Stefano Cossu 3 周之前
父節點
當前提交
4b9829d66c
共有 9 個文件被更改,包括 65 次插入30 次删除
  1. 1 1
      Makefile
  2. 2 2
      include/codec.h
  3. 9 0
      include/core.h
  4. 2 2
      src/codec/Makefile
  5. 19 16
      src/codec/lexer_nt.re
  6. 24 1
      src/core.c
  7. 2 2
      src/namespace.c
  8. 1 1
      src/store.c
  9. 5 5
      src/term.c

+ 1 - 1
Makefile

@@ -21,7 +21,7 @@ MASSIF_DUMP = /tmp/lsup_massif.out
 
 INCLUDE_BASE := . -Iinclude -Iext/tpl/src -Iext/hashmap -Iext/log/src
 INCLUDE := -I$(INCLUDE_BASE)
-_CFLAGS := -std=gnu11 -Wall -fPIC -MMD $(INCLUDE)
+_CFLAGS := -std=c11 -pedantic-errors -Wall -fPIC -MMD $(INCLUDE)
 CFLAGS = $(_CFLAGS) -O3
 DBG_CFLAGS = $(_CFLAGS) -Itest -O0 -g3 -DDEBUG
 #$(info CFLAGS: $(CFLAGS))

+ 2 - 2
include/codec.h

@@ -208,7 +208,7 @@ struct codec_t {
  */
 inline uint8_t
 *uint8_dup (const uint8_t *str)
-{ return (uint8_t *) strdup ((char *) str); }
+{ return (uint8_t *) str_dup ((char *) str); }
 
 
 /** @brief strndup() for unsigned char.
@@ -218,7 +218,7 @@ inline uint8_t
  */
 inline uint8_t
 *uint8_ndup (const uint8_t *str, size_t size)
-{ return (uint8_t *) strndup ((char *) str, size); }
+{ return (uint8_t *) str_ndup ((char *) str, size); }
 
 
 /** @brief Add escape character (backslash) to illegal literal characters.

+ 9 - 0
include/core.h

@@ -263,6 +263,15 @@ LSUP_strerror (LSUP_rc rc);
  */
 #define LSUP_MAX_ERROR      LSUP_ENV_ERR
 
+
+/// Replacement for GNU strdup().
+char *str_dup (const char *str);
+
+
+/// Replacement for GNU strndup().
+char *str_ndup (const char *str, size_t max);
+
+
 /** @brief Encode a code point using UTF-8.
  *
  * https://gist.github.com/MightyPork/52eda3e5677b4b03524e40c9f0ab1da5

+ 2 - 2
src/codec/Makefile

@@ -18,7 +18,7 @@ $(info DBG_OBJ: $(DBG_OBJ))
 
 INCLUDE := -I$(INCLUDE_DIR) -I../../ext/tpl/src -I../../ext/hashmap \
 	-I../../ext/log/src
-CFLAGS = -std=gnu11 -Wall -fPIC -MMD $(INCLUDE)
+CFLAGS = -std=c11 -pedantic-errors -Wall -fPIC -MMD $(INCLUDE)
 DBG_CFLAGS = -I../../test -O0 -g3 -DDEBUG
 
 .DEFAULT_GOAL := codec
@@ -37,7 +37,7 @@ parsers: $(PARSER_SRC)
 
 # Parser C sources.
 parser_%.c: lexer_%.re grammar_%.c ../codec.c
-	$(LEXER) $< -o $@ -T --case-ranges
+	$(LEXER) $< -o $@ -T
 
 
 .PRECIOUS: grammar_%.c $(CODEC_INCLUDE_DIR)/tokens_%.h

+ 19 - 16
src/codec/lexer_nt.re

@@ -10,19 +10,19 @@
 
 
 typedef struct {
-    FILE *          fh;                 // Input file handle.
-    YYCTYPE         buf[CHUNK_SIZE],    // Start of buffer.
-            *       lim,                // Position after the last available
-                                        //   input character (YYLIMIT).
-            *       cur,                // Next input character to be read
-                                        //   (YYCURSOR)
-            *       mar,                // Most recent match (YYMARKER)
-            *       tok,                // Start of current token.
-            *       bol;                // Address of the beginning of the
-                                        //   current line (for debugging).
-    unsigned        line;               // Current line no. (for debugging).
-    unsigned        ct;                 // Number of parsed triples.
-    bool            eof;                // if we have reached EOF.
+    FILE *          fh;                 ///< Input file handle.
+    YYCTYPE         buf[CHUNK_SIZE],    ///< Start of buffer.
+            *       lim,                ///< Position after the last available
+                                        ///<   input character (YYLIMIT).
+            *       cur,                ///< Next input character to be read
+                                        ///<   (YYCURSOR)
+            *       mar,                ///< Most recent match (YYMARKER)
+            *       tok,                ///< Start of current token.
+            *       bol;                ///< Address of the beginning of the
+                                        ///<   current line (for debugging).
+    unsigned        line;               ///< Current line no. (for debugging).
+    unsigned        ct;                 ///< Number of parsed triples.
+    bool            eof;                ///< if we have reached EOF.
     /*!stags:re2c format = "YYCTYPE *@@;"; */
 } ParseIterator;
 
@@ -64,9 +64,9 @@ static void parse_init(ParseIterator *it, FILE *fh)
 
 
 // Parser interface. Required here to silence linters.
-void *NTParseAlloc();
-void NTParse();
-void NTParseFree();
+//void *NTParseAlloc(void *);
+//void NTParse(void *);
+//void NTParseFree(void *);
 #ifdef DEBUG
 void NTParseTrace();
 #endif
@@ -76,6 +76,9 @@ void NTParseTrace();
 static int lex (ParseIterator *it, LSUP_Term **term)
 {
     const YYCTYPE *lit_data_e, *dtype_s, *lang_s;
+    (void) lit_data_e;
+    (void) dtype_s;
+    (void) lang_s;
 
 loop:
 

+ 24 - 1
src/core.c

@@ -44,10 +44,33 @@ char *err_msg[] = {
 char *LSUP_root_path = __FILE__; // This is trimmed to root path on init.
 
 
+char *str_ndup (const char *str, size_t max)
+{
+    size_t len = strlen (str);
+    if (len > max) len = max;
+
+    char *res = (char*)malloc (len + 1);
+    if (res)
+    {
+        memcpy (res, str, len);
+        res[len] = '\0';
+    }
+    return res;
+}
+
+char *str_dup (const char *src)
+{
+   char *tmp = (char*)malloc(strlen(src) + 1);
+   if(tmp)
+       strcpy(tmp, src);
+   return tmp;
+}
+
+
 LSUP_rc
 mkdir_p (const char *_path, mode_t mode)
 {
-    char *path = strdup (_path);
+    char *path = str_dup (_path);
     char *p;
 
     // Trim any trailing slash(es).

+ 2 - 2
src/namespace.c

@@ -80,7 +80,7 @@ LSUP_nsmap_add (NSMap *map, const char *pfx, const char *nsstr)
                 "Prefix `%s` is longer than the maximum allowed size "
                 "(%d characters). Truncating.", pfx, PFX_LEN - 1);
     strncpy (entry_s.pfx, pfx, PFX_LEN -1);
-    char *ns = strdup (nsstr);
+    char *ns = str_dup (nsstr);
 
     NSEntry *ret = hashmap_get (map, &entry_s);
     if (!ret) {
@@ -222,7 +222,7 @@ LSUP_nsmap_denormalize_uri (
         rc = LSUP_OK;
 
     } else {
-        pfx_uri = strdup (fq_uri);
+        pfx_uri = str_dup (fq_uri);
         rc = LSUP_NORESULT;
     }
 

+ 1 - 1
src/store.c

@@ -32,7 +32,7 @@ LSUP_store_new (
 
     store->type = store_type;
     store->sif = sif;
-    store->id = store_id ? strdup (store_id) : NULL;
+    store->id = store_id ? str_dup (store_id) : NULL;
     // TODO implement custom default context.
     store->data = store->sif->new_fn (store_id, size);
 

+ 5 - 5
src/term.c

@@ -407,7 +407,7 @@ LSUP_iriref_prefix (const LSUP_Term *iri)
 
     // if (iri->iri_info->prefix.size == 0) return NULL;
 
-    return strndup (
+    return str_ndup (
             iri->data + iri->iri_info->prefix.offset,
             iri->iri_info->prefix.size);
 }
@@ -423,7 +423,7 @@ LSUP_iriref_path (const LSUP_Term *iri)
 
     // if (iri->iri_info->path.size == 0) return NULL;
 
-    return strndup (
+    return str_ndup (
             iri->data + iri->iri_info->path.offset,
             iri->iri_info->path.size);
 }
@@ -439,7 +439,7 @@ LSUP_iriref_frag (const LSUP_Term *iri)
 
     // if (iri->iri_info->frag.size == 0) return NULL;
 
-    return strndup (
+    return str_ndup (
             iri->data + iri->iri_info->frag.offset,
             iri->iri_info->frag.size);
 }
@@ -816,7 +816,7 @@ term_init (
             term->iri_info->nsm = metadata;
         }
 
-        term->data = strdup (data);
+        term->data = str_dup (data);
 
     } else {
         // No data. Make up a random UUID or URI if allowed.
@@ -843,7 +843,7 @@ term_init (
                 term->iri_info->frag.size = 0;
                 term->iri_info->nsm = NULL;
 
-            } else term->data = strdup (uuid_str);
+            } else term->data = str_dup (uuid_str);
         } else {
             log_error ("No data provided for term.");
             return LSUP_VALUE_ERR;