/* * call-seq: * File.extname(path) -> string * * Returns the extension (the portion of file name in <i>path</i> * after the period). * * File.extname("test.rb") #=> ".rb" * File.extname("a/b/d/test.rb") #=> ".rb" * File.extname("test") #=> "" * File.extname(".profile") #=> "" * */ static VALUE rb_file_s_extname(klass, fname) VALUE klass, fname; { char *name, *p, *e; VALUE extname; name = StringValueCStr(fname); p = strrdirsep(name); /* get the last path component */ if (!p) p = name; else p++; e = strrchr(p, '.'); /* get the last dot of the last component */ if (!e || e == p || !e[1]) /* no dot, or the only dot is first or end? */ return rb_str_new2(""); extname = rb_str_new(e, chompdirsep(e) - e); /* keep the dot, too! */ OBJ_INFECT(extname, fname); return extname; }