]> granicus.if.org Git - jq/commitdiff
Drop the jq version directory from search path
authorNicolas Williams <nico@cryptonector.com>
Sat, 30 Aug 2014 05:58:24 +0000 (00:58 -0500)
committerNicolas Williams <nico@cryptonector.com>
Sat, 30 Aug 2014 05:58:24 +0000 (00:58 -0500)
execute.c
jq.h
linker.c
tests/modules/a.jq [moved from tests/modules/1.4-master/a.jq with 100% similarity]
tests/modules/b/b.jq [moved from tests/modules/1.4-master/b/b.jq with 100% similarity]

index 97b33d3d3fea2472d7bdd2e3cb6f44414642b2d9..acb42c5c5e0a20695c69f1c377300b1f31c392c1 100644 (file)
--- a/execute.c
+++ b/execute.c
@@ -992,12 +992,6 @@ jv jq_get_lib_dirs(jq_state *jq) {
   return jq_get_attr(jq, jv_string("LIB_DIRS"));
 }
 
-jv jq_get_version_dir(jq_state *jq) {
-  jv d = jq_get_attr(jq, jv_string("VERSION_DIR"));
-  assert(jv_is_valid(d));
-  return d;
-}
-
 void jq_set_attrs(jq_state *jq, jv attrs) {
   assert(jv_get_kind(attrs) == JV_KIND_OBJECT);
   jv_free(jq->attrs);
diff --git a/jq.h b/jq.h
index b517c529894205a4c378792390e1541105a8ee85..3c9c7e31c63b3c45e0f4fb6db7d9ac4de203398e 100644 (file)
--- a/jq.h
+++ b/jq.h
@@ -26,7 +26,6 @@ void jq_set_attrs(jq_state *, jv);
 jv jq_get_attrs(jq_state *);
 jv jq_get_lib_origin(jq_state *);
 jv jq_get_lib_dirs(jq_state *);
-jv jq_get_version_dir(jq_state *);
 void jq_set_attr(jq_state *, jv, jv);
 jv jq_get_attr(jq_state *, jv);
 #endif /* !_JQ_H_ */
index 1b152e68b33dbdcc39e82f01b139afe8dbfc6374..bea1c30bb4bf4b62dcddbabedd703b2bdefe429e 100644 (file)
--- a/linker.c
+++ b/linker.c
@@ -76,7 +76,7 @@ static jv name2relpath(jv name) {
   return rp;
 }
 
-static jv find_lib(jq_state *jq, jv lib_name, jv lib_search_path, int use_vers_dir) {
+static jv find_lib(jq_state *jq, jv lib_name, jv lib_search_path) {
   assert(jv_get_kind(lib_search_path) == JV_KIND_STRING);
   assert(jv_get_kind(lib_name) == JV_KIND_STRING);
 
@@ -86,54 +86,35 @@ static jv find_lib(jq_state *jq, jv lib_name, jv lib_search_path, int use_vers_d
     return rel_path;
   }
 
-  jv version_dirs;
-  if (use_vers_dir) {
-    jv vdir = jq_get_version_dir(jq);
-    assert(strchr(jv_string_value(vdir), '.') != NULL);
-    version_dirs = JV_ARRAY(jv_string(""), jv_string_concat(vdir, jv_string("/")));
-  } else {
-    version_dirs = JV_ARRAY(jv_string(""));
-  }
-
   struct stat st;
   int ret;
 
   jv lib_search_paths = build_lib_search_chain(jq, expand_path(lib_search_path));
 
   jv_array_foreach(lib_search_paths, i, spath) {
-    jv vds = jv_copy(version_dirs);
-    jv_array_foreach(vds, k, vd) {
-      jv testpath = jq_realpath(jv_string_fmt("%s/%s%s.jq",
-                                              jv_string_value(spath),
-                                              jv_string_value(vd),
-                                              jv_string_value(rel_path)));
-      ret = stat(jv_string_value(testpath),&st);
-      if (ret == -1 && errno == ENOENT) {
-        jv_free(testpath);
-        testpath = jq_realpath(jv_string_fmt("%s/%s%s/%s.jq",
-                                             jv_string_value(spath),
-                                             jv_string_value(vd),
-                                             jv_string_value(rel_path),
-                                             jv_string_value(lib_name)));
-        ret = stat(jv_string_value(testpath),&st);
-      }
-      jv_free(vd);
-      if (ret == 0) {
-        jv_free(spath);
-        jv_free(vds);
-        jv_free(version_dirs);
-        jv_free(rel_path);
-        jv_free(lib_name);
-        jv_free(lib_search_paths);
-        return testpath;
-      }
+    jv testpath = jq_realpath(jv_string_fmt("%s/%s.jq",
+                                            jv_string_value(spath),
+                                            jv_string_value(rel_path)));
+    ret = stat(jv_string_value(testpath),&st);
+    if (ret == -1 && errno == ENOENT) {
       jv_free(testpath);
+      testpath = jq_realpath(jv_string_fmt("%s/%s/%s.jq",
+                                           jv_string_value(spath),
+                                           jv_string_value(rel_path),
+                                           jv_string_value(lib_name)));
+      ret = stat(jv_string_value(testpath),&st);
+    }
+    if (ret == 0) {
+      jv_free(spath);
+      jv_free(rel_path);
+      jv_free(lib_name);
+      jv_free(lib_search_paths);
+      return testpath;
     }
-    jv_free(vds);
+    jv_free(testpath);
     jv_free(spath);
   }
   jv output = jv_invalid_with_msg(jv_string_fmt("module not found: %s", jv_string_value(lib_name)));
-  jv_free(version_dirs);
   jv_free(rel_path);
   jv_free(lib_name);
   jv_free(lib_search_paths);
@@ -161,13 +142,14 @@ static int process_dependencies(jq_state *jq, jv lib_origin, block *src_block, s
       jv_free(search);
       search = jv_string("");
     }
-    int has_origin = (strncmp("$ORIGIN/",jv_string_value(search),8) == 0);
-    if (has_origin) {
-      jv tsearch = jv_string_fmt("%s/%s",jv_string_value(lib_origin),jv_string_value(search)+8);
+    if (strncmp("$ORIGIN/",jv_string_value(search),8) == 0) {
+      jv tsearch = jv_string_fmt("%s/%s",
+                                 jv_string_value(lib_origin),
+                                 jv_string_value(search) + sizeof ("$ORIGIN/") - 1);
       jv_free(search);
       search = tsearch;
     }
-    jv lib_path = find_lib(jq, name, search, !has_origin);
+    jv lib_path = find_lib(jq, name, search);
     if (!jv_is_valid(lib_path)) {
       jv emsg = jv_invalid_get_msg(lib_path);
       jq_report_error(jq, jv_string_fmt("jq: error: %s\n",jv_string_value(emsg)));
@@ -238,7 +220,7 @@ static int load_library(jq_state *jq, jv lib_path, block *out_block, struct lib_
 }
 
 jv load_module_meta(jq_state *jq, jv modname) {
-  jv lib_path = find_lib(jq, modname, jv_string(""), 1);
+  jv lib_path = find_lib(jq, modname, jv_string(""));
   jv meta = jv_null();
   jv data = jv_load_file(jv_string_value(lib_path), 1);
   if (jv_is_valid(data)) {